如何在 JavaFx 中的 CheckBoxTreeView 中获取选中的项目

幸运儿斯特凡

如何在 JavaFx 中的 CheckBox TreeView 中获取选中的项目?我不知道如何实现这一点...您只能获得选定的项目...

ObservableList<TreeItem<String>> items = treeHazardsXmi.getSelectionModel().getSelectedItems();
詹姆斯_D

假设您正在使用CheckBoxTreeItems,则可以遍历树并测试每个人的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从WPF中的combobox获取选中的项目?

来自分类Dev

如何在CheckListBox中获取选中的项目字符串

来自分类Dev

如何在JavaFX中获取系统DPI?

来自分类Dev

如何在 JavaFX 中的可编辑 TableView 中获取上次编辑的项目

来自分类Dev

如何在JavaFX的ListView中获得项目的位置?

来自分类Dev

如何在IntelliJ IDEA中创建JavaFX Maven项目?

来自分类Dev

JavaFx如何在ChoiceBox中添加4000个项目

来自分类Dev

如何在 JavaFx 的 ListView 中编程选择多个项目?

来自分类Dev

如何在JavaFX中设置占位符?

来自分类Dev

如何在JavaFx中设置svgPath的大小

来自分类Dev

javafx:如何在TableView中显示String

来自分类Dev

如何在Javafx中添加刻度线?

来自分类Dev

如何在JavaFX WebView中包含jquery?

来自分类Dev

如何在JavaFX中设置ListView边框

来自分类Dev

如何在JavaFX(fxml)中响铃

来自分类Dev

如何在JavaFX中获得小的ProgressBar

来自分类Dev

如何在JavaFX中显示表格信息?

来自分类Dev

如何在JavaFx中设置任务超时?

来自分类Dev

如何在JavaFX中擦除标签?

来自分类Dev

如何在JavaFx中删除TableRow

来自分类Dev

如何在Javafx 8中触发Zoomevent

来自分类Dev

如何在javafx的阶段中删除场景?

来自分类Dev

如何在JavaFx中创建.xml文件

来自分类Dev

如何在javafx中处理Future的结果

来自分类Dev

如何在javaFX中绑定列表?

来自分类Dev

如何在javafx中设置边框间距

来自分类Dev

如何在javafx ListView中显示图形

来自分类Dev

如何在JavaFX中处理Node焦点

来自分类Dev

如何在JavaFX中创建动画的LineChart?