2016-06-13 3 views
0

TreeViewerには2つの似たノードがあります。彼らは同じデータオブジェクトを使用します。一番下のノードを選択して変更すると、一番上のノードが更新されますが、一番下のノードに変更はありません。更新前のTreeViewerの同様のノードで正しく更新されない

Before update

アップデート後:私はノードの名前を変更した後TreeViewer.refresh(problemNode)を使用しています

After

。 JavadocのTreeViewer.refresh(Object element)によると、ツリーは指定された要素から更新されます。何らかの理由で、トップノードを更新するのはなぜですか?以来、それは同じデータオブジェクトを使用するので、両方のノードが更新されるべきではない?

答えて

1

ツリーの2つの部分で同じオブジェクトを使用すると、この動作が発生します。

「同じオブジェクト」とは、equalshashCodeメソッドがオブジェクトを同じように見せるものを意味します。

この問題を回避するには、ツリービューアのIElementComparerクラスを使用します。これであなたは

public boolean equals(Object a, Object b); 

public int hashCode(Object element); 

を実装し、ツリー内の二つの要素と要素を比較するとき、比較演算equals方法はfalseを返すことを確認する必要があり、好ましくは、異なるhashCodeを持っています。

TreeViewer.setComparerを呼び出して、ツリービューアにコンペアーについて伝えます。

関連する問題