在 ControlsFX CheckTreeView 中删除 parent 和 children 的检查状态之间的连接

Remove connection between checked states of parent and children in ControlsFX CheckTreeView

我正在使用 CheckTreeView 来表示层次结构。当前的检查行为是如果我 check/uncheck a parent,它的所有 children 将自动得到 check/unchecked。如果我 check/uncheck 所有 children parent 也会自动获得 checked/unchecked。有什么办法可以消除这种行为?我希望能够在不将 parent 的选中状态更改为 true 的情况下检查所有 children。我还希望能够检查 parent 和一些或没有 children 但不是全部。简而言之,我希望复选框完全独立于其他复选框。我已附上经过编辑的屏幕截图来展示我所描述的内容

构建树的示例代码:

@FXML
private void initialize() {
    CheckBoxTreeItem<String> parent1 = new CheckBoxTreeItem<>("Parent 1");
    addChildren(parent1);
    CheckBoxTreeItem<String> parent2 = new CheckBoxTreeItem<>("Parent 2");
    addChildren(parent2);
    CheckBoxTreeItem<String> root = new CheckBoxTreeItem<>("Root");
    root.getChildren().addAll(parent1, parent2);
    ctv.setRoot(root);
}

private void addChildren(TreeItem<String> parent) {
    parent.getChildren().add( new CheckBoxTreeItem<>("Child 1"));
    parent.getChildren().add( new CheckBoxTreeItem<>("Child 2"));
}

默认情况下 CheckBoxTreeItem 是相关的。

要更改默认值,请使用 setIndependent() 调用:

parent1.setIndependent(true);
parent2.setIndependent(true);

儿童也一样:

CheckBoxTreeItem<String> child1 = new CheckBoxTreeItem<>("Child 1");
child1.setIndependent(true);
parent.getChildren().add(child1);
CheckBoxTreeItem<String> child2 = new CheckBoxTreeItem<>("Child 2");
child2.setIndependent(true);
parent.getChildren().add(child2);

参见 API: JavaFX Javadocs