【问题标题】:Sorting a Basic Tree in SWT/Eclipse RCP在 SWT/Eclipse RCP 中对基本树进行排序
【发布时间】:2014-07-05 22:20:22
【问题描述】:

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

我尝试了以下方法:

Arrays.sort(treeItem.getItems());

但是TreeItem 没有实现Comparable<T> 所以它不会工作。

【问题讨论】:

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

标签: java sorting tree swt eclipse-rcp


【解决方案1】:

如果你直接使用Tree,可以看一下“排序树”一章:http://www.ibm.com/developerworks/lotus/library/expeditor-swt/

我推荐使用 TreeViewer 并查看“Viewer Sorter”章节:https://www.eclipse.org/articles/Article-TreeViewer/TreeViewerArticle.htm

问候,

【讨论】:

    【解决方案2】:

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

    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- 开头表示值。所以值名称“Trend”将有一个排序键“-b-trend”,依此类推。

    +顶部
    +-物品
    +-更多项目
    ----价值
    --基本价值

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 2010-12-03
      • 2011-04-01
      • 1970-01-01
      • 2012-07-25
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多