如何在 JavaFx 中的 CheckBox TreeView 中获取选中的项目?我不知道如何实现这一点...您只能获得选定的项目...
ObservableList<TreeItem<String>> items = treeHazardsXmi.getSelectionModel().getSelectedItems();
假设您正在使用CheckBoxTreeItem
s,则可以遍历树并测试每个人的selected
属性:
ObservableSet<CheckBoxTreeItem<?>> checkedItems = FXCollections.observableHashSet();
findCheckedItems((CheckBoxTreeItem<?>) tree.getRoot(), checkedItems);
// ...
private void findCheckedItems(CheckBoxTreeItem<?> item, ObservableSet<CheckBoxTreeItem<?>> checkedItems) {
if (item.isSelected()) {
checkedItems.add(item);
}
for (TreeItem<?> child : item.getChildren()) {
findCheckedItems((CheckBoxTreeItem<?>) child, checkedItems);
}
}
如果您有一棵非常大的树,这在计算上是不允许的,您可以维护一组已检查的项目,并通过观察每个项目的selectedProperty
,随时保持该集合的更新。这里的缺点是您必须保持警惕以始终创建CheckBoxTreeItem
以便它更新集合:
private ObservableSet<CheckBoxTreeItem<?>> checkedItems = FXCollections.observableHashSet();
private <T> CheckBoxTreeItem<T> createTreeItem(T value) {
CheckBoxTreeItem<T> item = new CheckBoxTreeItem<>(value);
item.selectedProperty().addListener((obs, wasChecked, isNowChecked) -> {
if (isNowChecked) {
checkedItems.add(item);
} else {
checkedItems.remove(item);
}
});
return item ;
}
现在,只要您的项目是通过该createTreeItem()
方法创建的,该checkedItems
集合将始终包含选中的项目。
请注意,如果您的树是动态的(您在运行时添加和删除节点),如果从树中删除项目,您应该更进一步并取消注册侦听器(留给读者作为练习......)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句