Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SWT/Eclipse RCP中对基本树进行排序_Java_Sorting_Tree_Swt_Eclipse Rcp - Fatal编程技术网

Java 在SWT/Eclipse RCP中对基本树进行排序

Java 在SWT/Eclipse RCP中对基本树进行排序,java,sorting,tree,swt,eclipse-rcp,Java,Sorting,Tree,Swt,Eclipse Rcp,我正在构建一个EclipseRCP应用程序,需要按字母顺序对一些树进行排序。有没有办法在SWT中对树的内容进行排序?我在树中没有列;这只是一棵普通的老树,就像您可以在Eclipse包资源管理器中找到的一样。事实上如果我能做与PackageExplorer字母排序完全相同的事情,我会很高兴 我尝试了以下方法: Arrays.sort(treeItem.getItems()); 但是TreeItem没有实现Compariable,因此它无法工作。如果您直接使用Tree,可以查看“排序树”一章: 我

我正在构建一个EclipseRCP应用程序,需要按字母顺序对一些树进行排序。有没有办法在SWT中对树的内容进行排序?我在树中没有列;这只是一棵普通的老树,就像您可以在Eclipse包资源管理器中找到的一样。事实上如果我能做与PackageExplorer字母排序完全相同的事情,我会很高兴

我尝试了以下方法:

Arrays.sort(treeItem.getItems());

但是TreeItem没有实现Compariable,因此它无法工作。

如果您直接使用Tree,可以查看“排序树”一章:

我建议使用TreeViewer并查看查看器排序器章节:


关于,

如果您直接使用Tree,可以查看“排序树”一章:

我建议使用TreeViewer并查看查看器排序器章节:


关于,

您不能对树进行排序,但可以按排序方式添加新项目,这实际上会对树进行排序:

private TreeItem insertItemSorted( TreeItem parentItem, KeyInfo keyInfo )
{
    TreeMap<String, Integer> sorted = new TreeMap<>();
    TreeItem newItem = null;
    TreeItem[] siblings;
    KeyInfo info;
    int index;

    if (parentItem == null || parentItem.getParent() == null)
        siblings = ivKeyTree.getItems();
    else
        siblings = parentItem.getItems();

    index = 0;

    for (TreeItem item : siblings)
    {
        info = (KeyInfo) item.getData();

        sorted.put( info.getSortKey(), new Integer( index++ ) );
    }

    sorted.put( keyInfo.getSortKey(), new Integer( -1 ) );

    index = 0;

    for (Integer number : sorted.values().toArray( new Integer[sorted.size()] ))
    {
        if (number.intValue() == -1)
        {
            if (parentItem == null || parentItem.getParent() == null)
                newItem = new TreeItem( ivKeyTree, Editor.TREE_KEY_STYLE, index );
            else
                newItem = new TreeItem( parentItem, Editor.TREE_KEY_STYLE, index );

            break;
        }

        index++;
    }

    if (newItem == null)
    {
        if (parentItem == null || parentItem.getParent() == null)
            newItem = new TreeItem( ivKeyTree, Editor.TREE_KEY_STYLE );
        else
            newItem = new TreeItem( parentItem, Editor.TREE_KEY_STYLE );
    }

    return newItem;
}
可以用接口keyInfo替换字符串。我之所以使用这个界面,是因为我在可扩展级别下对值进行排序。排序键以-a-开头表示级别,以-b-开头表示值。因此,值名趋势将有一个排序键-b-Trend,依此类推

+顶 +-项目 +-更多项目 --价值观
-基本值

您不能对树进行排序,但可以按排序方式添加新项,这实际上会对树进行排序:

private TreeItem insertItemSorted( TreeItem parentItem, KeyInfo keyInfo )
{
    TreeMap<String, Integer> sorted = new TreeMap<>();
    TreeItem newItem = null;
    TreeItem[] siblings;
    KeyInfo info;
    int index;

    if (parentItem == null || parentItem.getParent() == null)
        siblings = ivKeyTree.getItems();
    else
        siblings = parentItem.getItems();

    index = 0;

    for (TreeItem item : siblings)
    {
        info = (KeyInfo) item.getData();

        sorted.put( info.getSortKey(), new Integer( index++ ) );
    }

    sorted.put( keyInfo.getSortKey(), new Integer( -1 ) );

    index = 0;

    for (Integer number : sorted.values().toArray( new Integer[sorted.size()] ))
    {
        if (number.intValue() == -1)
        {
            if (parentItem == null || parentItem.getParent() == null)
                newItem = new TreeItem( ivKeyTree, Editor.TREE_KEY_STYLE, index );
            else
                newItem = new TreeItem( parentItem, Editor.TREE_KEY_STYLE, index );

            break;
        }

        index++;
    }

    if (newItem == null)
    {
        if (parentItem == null || parentItem.getParent() == null)
            newItem = new TreeItem( ivKeyTree, Editor.TREE_KEY_STYLE );
        else
            newItem = new TreeItem( parentItem, Editor.TREE_KEY_STYLE );
    }

    return newItem;
}
可以用接口keyInfo替换字符串。我之所以使用这个界面,是因为我在可扩展级别下对值进行排序。排序键以-a-开头表示级别,以-b-开头表示值。因此,值名趋势将有一个排序键-b-Trend,依此类推

+顶 +-项目 +-更多项目 --价值观
-基本值

您尝试过的代码在哪里?是的,有一些方法可以对树进行排序,如果您使用TreeViewer,这会容易得多。@greg-449这是JFace TreeViewer正确的吗?我该怎么做呢?TreeViewer有一个setComparator方法,您可以在其中指定一个类扩展ViewerComparator。您尝试过的代码在哪里?是的,有很多方法可以对树进行排序,如果您使用TreeViewer,这会容易得多。@greg-449这是JFace TreeViewer正确的方法吗?我该如何使用它呢?TreeViewer有一个setComparator方法,您可以在其中指定一个扩展类的ViewerComparator