对于TreeViewer中的类似节点,没有正确更新

时间:2016-06-13 12:41:38

标签: java swt jface rcp treeviewer

在TreeViewer中,有两个相似的节点。他们使用相同的数据对象。当我选择底部节点并进行修改时,它会更新顶部节点,但底部节点没有变化。

更新前:

Before update

更新后:

After

我在修改节点名称后使用TreeViewer.refresh(problemNode)TreeViewer.refresh(Object element)的Javadoc说,树从给定元素开始更新。任何原因,为什么它更新顶级节点?既然,它使用相同的数据对象,不应该更新两个节点吗?

1 个答案:

答案 0 :(得分:1)

如果在树的两个部分中使用相同的对象,则可以获得此行为。

由相同的对象'我指的是equalshashCode方法使对象看起来相同的任何内容。

您可以通过为树查看器使用IElementComparer类来解决此问题。有了这个,你必须实现

public boolean equals(Object a, Object b);

public int hashCode(Object element);

并确保比较器equals方法在比较树中的两个元素时返回false,并且元素最好具有不同的hashCode

调用TreeViewer.setComparer告诉树查看器有关比较器的信息。