【问题标题】:JavaFX select an item CheckBoxTreeView without selecting children?JavaFX选择一个项目CheckBoxTreeView而不选择孩子?
【发布时间】:2013-07-10 01:28:46
【问题描述】:

每当我实例化一个 CheckBoxTreeView 时,它都需要一个具有 no 已选择子 TreeItem 的 TreeItem 以 未选择。我该如何改变呢?我尝试在父 TreeItem 上调用 setIndependent(true),但它仍然必须至少有一个选中的子 TreeItem 才能被检查。

我尝试制作一个带有复选框的自定义 TreeCell 作为图形,但不知道如何防止项目重置。这个问题贴在这里:https://stackoverflow.com/questions/17606280/javafx-2-checkbox-in-treecell-keeps-resetting-cant-bind-it

【问题讨论】:

    标签: checkbox treeview javafx treenode treeviewitem


    【解决方案1】:

    我认为您的问题是,当您扩展或恢复树的一部分时,TreeView 会创建全新的 CustomCheckBoxCell,默认情况下未选中。您可以在数组中跟踪您的 CustomCheckBoxCell 并在需要时将它们提供给 TreeView。我无法解决它。

    但是我可能听起来有点明显,您可能已经尝试过了,但是为什么不使用 TreeItem<CheckBox> 对象并将它们添加到您的 TreeView 中呢?

    我尝试在以下代码中重现您的问题,如果我做对了,请告诉我。

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.CheckBox;
    import javafx.scene.control.CheckBoxTreeItem;
    import javafx.scene.control.TreeItem;
    import javafx.scene.control.TreeView;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    
    public class CheckBoxTreeView extends Application{
    
        @Override
        public void start(Stage primaryStage) throws Exception {
    
            CheckBoxTreeItem<CheckBox> rootItem = 
                    new CheckBoxTreeItem<CheckBox>(new CheckBox("root"));
            rootItem.setExpanded(true);                  
    
            final TreeView<CheckBox> tree = new TreeView<CheckBox>(rootItem);  
            tree.setEditable(true);
    
            for (int i = 0; i < 8; i++) {
    
                System.out.println("new tree Item");
                final TreeItem<CheckBox> checkBoxTreeItem = 
                        new TreeItem<CheckBox>(new CheckBox(GeoObj.toString()));
                rootItem.getChildren().add(checkBoxTreeItem);                
            }
    
            tree.setRoot(rootItem);
            System.out.println("root item set");
            tree.setShowRoot(true);
    
            StackPane root = new StackPane();
            root.getChildren().add(tree);
            primaryStage.setScene(new Scene(root, 300, 250));
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    
    }
    

    根据良好的原则,您的类型的第一个字母必须是大写... 然后 geoObj -> GeoObj customCheckBoxCell->CustomCheckBoxCell

    【讨论】:

    • 谢谢!我实际上做了类似的事情,我仍然使用 TreeItem 但只是将图形设置为 CheckBox 并编写代码来处理选择/取消选择子项。
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多