Java 在SWT/Eclipse RCP中对基本树进行排序
我正在构建一个EclipseRCP应用程序,需要按字母顺序对一些树进行排序。有没有办法在SWT中对树的内容进行排序?我在树中没有列;这只是一棵普通的老树,就像您可以在Eclipse包资源管理器中找到的一样。事实上如果我能做与PackageExplorer字母排序完全相同的事情,我会很高兴 我尝试了以下方法: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,可以查看“排序树”一章: 我
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