[英]Disable Context Menu on a a child of a root JavaFX TreeView<Label> with TreeItem<Label>
此结构中带有TreeItem<Label>
JavaFX 14 Treview
;
我已将ContextMenu
附加到根处的Label
以添加和删除组。 当没有组使用时,我可以禁用删除组;
removeGroupMenuItem.disableProperty().bind(Bindings.isEmpty(treeView.getRoot().getChildren()));
但是,我现在已将ContextMenu
附加到允许添加子项或删除所有子项的每个组的Label
。 我的问题是,如果选择了一个或多个组,我如何禁用删除所有子MenuItem
。
我试过哪个不起作用;
removeAllChildrenMenuItem.disableProperty().bind(Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.selectionModelProperty()));
欢迎任何想法!
您的Binding
不会失效,因为您的代码等待的是SelectionModel
属性的更改,而不是所选项目的更改:
Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.selectionModelProperty());
您可以通过更改绑定的依赖项来解决此问题:
Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.getSelectionModel().getSelectedItems());
注意:如果您在代码中的其他任何位置使用treeView.setSelectionModel(...)
更改树的选择模型,则必须再次重新绑定disable
属性。 如果这在你的代码中很常见,你可以向选择模型添加一个依赖项,这样代码就变成了这样:
Bindings.createBooleanBinding(() -> {...}, treeView.selectionModelProperty(), treeView.getSelectionModel().getSelectedItems());
这意味着,只要选择模型或所选项目发生变化,就重新计算该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.