作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 JavaFx 中获取 CheckBox TreeView 中的选中项?我不知道如何实现这一点...您只能得到选定的项...
ObservableList<TreeItem<String>> items = treeHazardsXmi.getSelectionModel().getSelectedItems();
最佳答案
假设您正在使用 CheckBoxTreeItem
,您可以遍历树并测试每个的 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
集将始终包含选中的项目。
请注意,如果您的树是动态的(您在运行时添加和删除节点),您应该更进一步并在从树中删除该项目时注销监听器(留给读者练习......)。
关于javafx - 如何在 JavaFx 中获取 CheckBoxTreeView 中的选中项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42828781/
我是一名优秀的程序员,十分优秀!