2016-06-13 5 views
0

TreeViewer에 두 개의 유사한 노드가 있습니다. 그들은 동일한 데이터 객체를 사용합니다. 맨 아래 노드를 선택하고 수정하면 맨 위 노드가 업데이트되지만 맨 아래 노드에는 변경 사항이 없습니다. 업데이트하기 전에TreeViewer에서 유사한 노드에 대해 올바르게 업데이트되지 않음

:

Before update

업데이트 후 : 내가 노드의 이름을 수정 한 후 TreeViewer.refresh(problemNode)을 사용하고

After

. TreeViewer.refresh(Object element)의 Javadoc에 따르면 트리는 지정된 요소에서부터 시작하여 업데이트됩니다. 어떤 이유로 상위 노드를 업데이트하는 이유는 무엇입니까? 이후, 그것은 동일한 데이터 객체를 사용하기 때문에 두 노드를 모두 업데이트하면 안된다.

답변

1

트리의 두 부분에서 동일한 객체를 사용하면이 동작을 얻을 수 있습니다.

'동일한 객체'는 equalshashCode 메소드가 객체를 똑같이 보이게 만드는 것을 의미합니다.

트리 뷰어에 IElementComparer 클래스를 사용하여이 문제를 해결할 수 있습니다. 이하면

public boolean equals(Object a, Object b); 

public int hashCode(Object element); 

를 구현하고 트리의 두 요소를 비교 요소가 바람직 다른 hashCode이 때 비교 자 equals 방법은 false을 반환 있는지 확인해야합니다.

트리 뷰어에 비교자를 알리기 위해 TreeViewer.setComparer으로 전화하십시오.