2014-06-03 3 views
0

У меня есть TreeViewer, элементы которого я пытаюсь развернуть или свернуть на один уровень. My TreeViewer содержит элементы с тем же именем. Например:TreeViewer Expand-/Collapse-ToLevel Bug

Node 1 
    -> Node A 
     -> Node B 
     -> Node C 
Node 2 
    -> Node A 
     -> Node B 
     -> Node C 

Даже если я выбираю второй узел А чтобы развернуть или свернуть, он все равно будет развернуть или свернуть первый узел А.

Мой код для расширения является:

ITreeSelection selection = (ITreeSelection) tree.getSelection(); 
TreeNode selectedItem = (TreeNode) selection.getFirstElement(); 
tree.expandToLevel(selectedItem, 1); 

Мой код для коллапса:

ITreeSelection selection = (ITreeSelection) tree.getSelection(); 
TreeNode selectedItem = (TreeNode) selection.getFirstElement(); 
TreeNode[] children = selectedItem.getChildren(); 
if (children != null) { 
    for (TreeNode child : children) { 
     tree.collapseToLevel(child, 1); 
    } 
} 

что я могу сделать так, чтобы дерево Средство просмотра расширяет и сворачивает правый выбранный элемент?

ответ

1

Вы должны убедиться, что метод equals для разных объектов с таким же именем в дереве не возвращает true. Средство просмотра дерева не сможет найти правильные элементы дерева, если equals возвращает true для двух разных объектов. Как всегда, вы должны сделать hashCode совместимым с реализацией equals.

Если вы не можете исправить метод equals в объектах, вы можете использовать IElementComparer, чтобы создать специальное сравнение для древовидного просмотра. Используйте TreeViewer.setComparer, чтобы установить компаратор для дерева.

Смежные вопросы