JavaFX:在 TreeView 中显示存储的 CheckBoxTreeItem 选择
JavaFX: display stored CheckBoxTreeItem selection in TreeView
我将 treeView 用于 select 部分,这些部分稍后将显示在报告中。为了提高用户友好性,我决定保存 selection,这样用户下次就不必再 select 相同的部分了。我已经保存了 selection,但是当初始化视图时,treeView 没有正确显示 selection (img 1)。我正在寻找一种显示 treeView 的方法,如 img 2 中所示。
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();
}
}
如果您首先将您的 CheckBoxTreeItem 添加到它们各自的父级,那么在您更改值之前,值更改触发器会起作用,并且应用程序会按预期工作。
aItem.getChildren().addAll(a1Item, a2Item);
rootItem.getChildren().addAll(aItem, bItem, cItem);
a1Item.setSelected(true);
aItem.setExpanded(true);
我将 treeView 用于 select 部分,这些部分稍后将显示在报告中。为了提高用户友好性,我决定保存 selection,这样用户下次就不必再 select 相同的部分了。我已经保存了 selection,但是当初始化视图时,treeView 没有正确显示 selection (img 1)。我正在寻找一种显示 treeView 的方法,如 img 2 中所示。
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();
}
}
如果您首先将您的 CheckBoxTreeItem 添加到它们各自的父级,那么在您更改值之前,值更改触发器会起作用,并且应用程序会按预期工作。
aItem.getChildren().addAll(a1Item, a2Item);
rootItem.getChildren().addAll(aItem, bItem, cItem);
a1Item.setSelected(true);
aItem.setExpanded(true);