我使用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();
}
}
答案 0 :(得分:3)
如果首先将CheckBoxTreeItems添加到它们各自的父级,则在更改值之前,值更改触发器将起作用,并且应用程序将按预期运行。
aItem.getChildren().addAll(a1Item, a2Item);
rootItem.getChildren().addAll(aItem, bItem, cItem);
a1Item.setSelected(true);
aItem.setExpanded(true);