在TreeViewer中,有两个相似的节点。他们使用相同的数据对象。当我选择底部节点并进行修改时,它会更新顶部节点,但底部节点没有变化。
更新前:
更新后:
我在修改节点名称后使用TreeViewer.refresh(problemNode)
。 TreeViewer.refresh(Object element)
的Javadoc说,树从给定元素开始更新。任何原因,为什么它更新顶级节点?既然,它使用相同的数据对象,不应该更新两个节点吗?
答案 0 :(得分:1)
如果在树的两个部分中使用相同的对象,则可以获得此行为。
由相同的对象'我指的是equals
和hashCode
方法使对象看起来相同的任何内容。
您可以通过为树查看器使用IElementComparer
类来解决此问题。有了这个,你必须实现
public boolean equals(Object a, Object b);
public int hashCode(Object element);
并确保比较器equals
方法在比较树中的两个元素时返回false
,并且元素最好具有不同的hashCode
。
调用TreeViewer.setComparer
告诉树查看器有关比较器的信息。