Я использовал библиотеку eclipse fx.ui.controls
для того же самого достижения той же цели.
<dependency>
<groupId>at.bestsolution.eclipse</groupId>
<artifactId>org.eclipse.fx.ui.controls</artifactId>
<version>2.2.0</version>
</dependency>
Библиотека предоставляет класс: FilterableTreeItem<T>
в пакете дерева. Этот класс был разработан для использования в таких случаях, как ваш. Вы можете указать Predicate
для root дерева, и элементы будут скрыты при изменении заданного значения:
// Children
final FilterableTreeItem<Component> childNode1 = new FilterableTreeItem<>(component1);
final FilterableTreeItem<Component> childNode2 = new FilterableTreeItem<>(component2);
final FilterableTreeItem<Component> childNode3 = new FilterableTreeItem<>(component3);
// Root
final FilterableTreeItem<Component> root = new FilterableTreeItem<>(rootComponent);
root.getInternalChildren().setAll(childNode1, childNode2, childNode3);
root.setPredicate((parent, value) -> value.isSelected());
// TreeTableView
final TreeTableView<Component> treeTableView = new TreeTableView<>(root);
Обратите внимание, что вы должны использовать getInternalChildren()
для добавления потомков и по умолчанию getChildren()
.
FilterableTreeItem<T>
также предоставляет predicateProperty()
, который можно привязать к другому свойству в случае, если вам необходимо обновить способ отображения или скрытия элементов.
Еще одно преимущество этот класс показывает, что он показывает весь путь до root элементов, соответствующих этому предикату.