如何在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/

10-16 02:21
查看更多