TreeViewer 中类似节点的更新未正确发生

Update not happening properly for similar nodes in a TreeViewer

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

更新前:

更新后:

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

如果您在树的两个部分中使用相同的对象,就会出现这种情况。

'same object' 我的意思是 equalshashCode 方法使对象看起来相同。

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

public boolean equals(Object a, Object b);

public int hashCode(Object element);

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

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