Дерево Java SWT Развернуть все / Свернуть все

Как я могу сделать функции «Развернуть все» и «Свернуть все» для моего собственного дерева SWT, аналогично кнопке «Свернуть все» в проводнике пакетов Eclipse?


person Andrei Statescu    schedule 04.11.2016    source источник


Ответы (1)


Если вы просто используете SWT Tree, вы должны просмотреть все элементы в дереве и развернуть/свернуть каждый из них. Например:

boolean expanded = true to expand, false to collapse

Tree tree = ... your tree

tree.setRedraw(false);  // Stop redraw until operation complete

TreeItem [] items = tree.getItems();

for (TreeItem item : items) {
   item.setExpanded(expanded);
}

tree.setRedraw(true);

Если вы используете JFace TreeViewer, вызовите методы просмотра collapseAll или expandAll.

person greg-449    schedule 04.11.2016
comment
Если вы используете JFace TreeViewer, имейте в виду, что существует ошибка, вызывающая указатель мыши мерцает при развертывании больших деревьев. Обходной путь — вызвать expandAll() из исполняемого объекта, который передается BusyIndicator::showWhile(). - person Rüdiger Herrmann; 04.11.2016
comment
Зачем нужно останавливать перерисовку до завершения операции? - person eliaspr; 10.08.2017
comment
@Professor901 Это останавливает отрисовку отдельных расширений отдельно, замедляя работу и, возможно, вызывая мерцание. - person greg-449; 10.08.2017