Javafx 将CheckBoxTreeItem设置为始终选中

Javafx 将CheckBoxTreeItem设置为始终选中,javafx,checkbox,treeview,Javafx,Checkbox,Treeview,我正在使用树状视图在打印视图中更快地导航。在用户打印文档之前,他可以选择或取消选择列。有些列是必需的,所以我想做的是,即使用户试图取消选择它们,它们也始终处于选中状态。这是一个它看起来如何的例子。如何将项目的选择设置为true并保持这样 public class TreeItemExample extends Application { public static void main(String[] args) { launch(args); } @Override public

我正在使用树状视图在打印视图中更快地导航。在用户打印文档之前,他可以选择或取消选择列。有些列是必需的,所以我想做的是,即使用户试图取消选择它们,它们也始终处于选中状态。这是一个它看起来如何的例子。如何将项目的选择设置为true并保持这样

public class TreeItemExample extends Application {

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello World!");

    AnchorPane root = new AnchorPane();
    TreeView<String> treeView = new TreeView<>();
    CheckBoxTreeItem<String> rootItem = new CheckBoxTreeItem<>("Example");
    CheckBoxTreeItem<String> mandatoryItem = new CheckBoxTreeItem<>("A");
    CheckBoxTreeItem<String> optionalItem = new CheckBoxTreeItem<>("B");

    mandatoryItem.setSelected(true);
    mandatoryItem.selectedProperty().addListener((observable, oldValue, newValue) -> {
        newValue = true;
        mandatoryItem.setSelected(true);
    });
    rootItem.getChildren().addAll(mandatoryItem, optionalItem);
    treeView.setRoot(rootItem);
    treeView.setCellFactory(CheckBoxTreeCell.<String>forTreeView());

    root.getChildren().add(treeView);

    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
}
公共类树示例扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公共无效开始(阶段primaryStage){
setTitle(“你好,世界!”);
锚烷根=新锚烷();
TreeView TreeView=新的TreeView();
CheckBoxTreeItem rootItem=新的CheckBoxTreeItem(“示例”);
CheckBoxTreeItem mandatoryItem=新的CheckBoxTreeItem(“A”);
CheckBoxTreeItem optionalItem=新的CheckBoxTreeItem(“B”);
mandatoryItem.setSelected(true);
mandatoryItem.selectedProperty().addListener((可观察、旧值、新值)->{
newValue=true;
mandatoryItem.setSelected(true);
});
rootItem.getChildren().addAll(mandatoryItem,optionItem);
treeView.setRoot(rootItem);
setCellFactory(CheckBoxTreeCell.forTreeView());
root.getChildren().add(treeView);
原始阶段。设置场景(新场景(根,300250));
primaryStage.show();
}

}将mandatoryItem selectedProperty listener更改为:

mandatoryItem.selectedProperty().addListener((observable, oldValue, newValue) -> {
    Platform.runLater(() -> mandatoryItem.setSelected(true));
});

@是的,对我来说,这并不那么明显。当newValue为false时,mandatoryItem selected设置为true,所以控制状态已更改,但gui未反映出来。我认为这是bug,使用平台.RunTrand()作为解决方案。