JavaFX选择项目CheckBoxTreeView而不选择子项?

JavaFX选择项目CheckBoxTreeView而不选择子项?,checkbox,treeview,javafx,treenode,treeviewitem,Checkbox,Treeview,Javafx,Treenode,Treeviewitem,每当我实例化CheckBoxTreeView时,它要求一个带有否选定子树项的树项未选中。我该如何改变这一点?我尝试在父树项上调用setIndependent(true),但它必须至少有一个选中的子树项才能被选中 我试着制作一个带有复选框的自定义TreeCell,但不知道如何防止项目重置。此问题发布在此处:我认为您的问题在于,当您展开或恢复树的一部分时,TreeView会创建全新的CustomCheckBoxCell,默认情况下未选中它。您可以在阵列中跟踪CustomCheckBoxCell,并在

每当我实例化CheckBoxTreeView时,它要求一个带有选定子树项的树项未选中。我该如何改变这一点?我尝试在父树项上调用setIndependent(true),但它必须至少有一个选中的子树项才能被选中


我试着制作一个带有复选框的自定义TreeCell,但不知道如何防止项目重置。此问题发布在此处:

我认为您的问题在于,当您展开或恢复树的一部分时,TreeView会创建全新的CustomCheckBoxCell,默认情况下未选中它。您可以在阵列中跟踪CustomCheckBoxCell,并在需要时将其提供给TreeView。我没办法解决它

但是我可能听起来有点明显,您可能已经尝试过了,但是为什么不使用
TreeItem
对象并将它们添加到您的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);
    }

}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.CheckBox;
导入javafx.scene.control.CheckBoxTreeItem;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
公共类CheckBoxTreeView扩展了应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
CheckBoxTreeItem根项目=
新复选框树项(新复选框(“根”));
setExpanded(true);
最终树视图树=新树视图(根项目);
tree.setEditable(true);
对于(int i=0;i<8;i++){
System.out.println(“新树项”);
最终树项checkBoxTreeItem=
新建树项(新建复选框(geobj.toString());
rootItem.getChildren().add(checkBoxTreeItem);
}
tree.setRoot(rootItem);
System.out.println(“根项目集”);
tree.setShowRoot(true);
StackPane root=新的StackPane();
root.getChildren().add(树);
原始阶段。设置场景(新场景(根,300250));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
根据好的原则,你打字的第一个字母必须是大写。。。
然后geobj->geobj customCheckBoxCell->customCheckBoxCell

谢谢!我做了一些类似的事情,实际上,我仍然使用TreeItem,但只是将图形设置为复选框,并编写代码来处理选择/取消选择子对象。