2

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

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

4

1 回答 1

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

于 2013-07-24T08:51:12.183 回答