TreeViewer Expand- / Collapse-ToLevel Bug

时间:2014-06-03 05:19:01

标签: java swt treeviewer

我有一个TreeViewer,我试图扩展或折叠一个级别的项目。 我的TreeViewer包含具有相同名称的项目。 例如:

Node 1
  -> Node A
      -> Node B
         -> Node C
Node 2
  -> Node A
      -> Node B
         -> Node C

即使我选择第二个节点A进行展开或折叠,它仍会展开或折叠第一个节点A.

我的扩展代码是:

ITreeSelection selection = (ITreeSelection) tree.getSelection();
TreeNode selectedItem = (TreeNode) selection.getFirstElement();
tree.expandToLevel(selectedItem, 1);

我的崩溃代码是:

ITreeSelection selection = (ITreeSelection) tree.getSelection();
TreeNode selectedItem = (TreeNode) selection.getFirstElement();
TreeNode[] children = selectedItem.getChildren();
if (children != null) {
    for (TreeNode child : children) {
         tree.collapseToLevel(child, 1);
    }
}

我可以做什么,以便TreeViewer扩展和折叠正确的选定项目?

1 个答案:

答案 0 :(得分:1)

您必须确保树中具有相同名称的不同对象的equals方法不会返回true。如果equals对于两个不同的对象返回true,则树查看器将无法找到正确的树项。与往常一样,您必须使hashCode与equals实现兼容。

如果您无法修复对象中的equals方法,则可以使用IElementComparer为树查看器创建特殊比较。使用TreeViewer.setComparer设置树的比较器。