JavaFX:在TreeView中显示存储的CheckBoxTreeItem选择

时间:2019-11-25 11:22:09

标签: javafx checkbox treeview

我使用treeView选择要在报告中显示的部分。为了提高用户友好性,我决定保存选择,因此用户下次不必再次选择相同的部分。我已经保存了选择,但是在初始化视图时,treeView无法正确显示选择(img 1)。我正在寻找一种显示img 2中所示的treeView的方法。

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        CheckBoxTreeItem<String> rootItem = new CheckBoxTreeItem<>("Root");

        CheckBoxTreeItem<String> aItem = new CheckBoxTreeItem<>("A");

        CheckBoxTreeItem<String> a1Item = new CheckBoxTreeItem<>("A_1");
        CheckBoxTreeItem<String> a2Item = new CheckBoxTreeItem<>("A_2");

        CheckBoxTreeItem<String> bItem = new CheckBoxTreeItem<>("B");
        CheckBoxTreeItem<String> cItem = new CheckBoxTreeItem<>("C");

        a1Item.setSelected(true);
        aItem.setExpanded(true);

        aItem.getChildren().addAll(a1Item, a2Item);

        rootItem.getChildren().addAll(aItem, bItem, cItem);
        rootItem.setExpanded(true);

        TreeView treeView = new TreeView(rootItem);
        treeView.setCellFactory(CheckBoxTreeCell.<String>forTreeView());

        Scene scene = new Scene(treeView, 400, 400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

how it looks at the start how it should look at the start

1 个答案:

答案 0 :(得分:3)

如果首先将CheckBoxTreeItems添加到它们各自的父级,则在更改值之前,值更改触发器将起作用,并且应用程序将按预期运行。

aItem.getChildren().addAll(a1Item, a2Item);

rootItem.getChildren().addAll(aItem, bItem, cItem);

a1Item.setSelected(true);
aItem.setExpanded(true);