JavaFX选择一个项目CheckBoxTreeView而不选择孩子?

时间:2013-07-10 01:28:46

标签: checkbox treeview javafx treenode treeviewitem

每当我实例化一个CheckBoxTreeView时,它需要一个带有 no 的TreeItem选择的子TreeItems 取消选择。我该如何改变?我尝试在父TreeItem上调用 setIndependent(true),但它仍然必须至少检查一个被检查的子TreeItem。

我尝试使用复选框作为图形制作自定义TreeCell,但无法弄清楚如何防止项目重置。此问题发布在此处:https://stackoverflow.com/questions/17606280/javafx-2-checkbox-in-treecell-keeps-resetting-cant-bind-it

1 个答案:

答案 0 :(得分: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 - &gt; GeoObj customCheckBoxCell-&gt; CustomCheckBoxCell