gpt4 book ai didi

java - 使用 TreeItem

转载 作者:行者123 更新时间:2023-12-02 08:48:05 24 4
gpt4 key购买 nike

JavaFX 14 TreviewTreeItem<Label>在这个结构中;

      • child
      • child
      • child

我已附上ContextMenuLabel在根目录下添加和删除组。当没有组使用时,我可以禁用删除组;

removeGroupMenuItem.disableProperty().bind(Bindings.isEmpty(treeView.getRoot().getChildren()));

但是,我现在已附上ContextMenuLabel每个组允许添加子项或删除所有子项。我的问题是,如何禁用删除所有子项 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());

您可以通过更改绑定(bind)的依赖关系来解决此问题:

Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.getSelectionModel().getSelectedItems());

注意:如果您使用 treeView.setSelectionModel(...) 更改树的选择模型代码中的其他任何地方,您必须重新绑定(bind) disable再次属性(property)。如果这在您的代码中很常见,您可以向选择模型添加依赖项,以便代码变为如下所示:

Bindings.createBooleanBinding(() -> {...}, treeView.selectionModelProperty(), treeView.getSelectionModel().getSelectedItems());

这意味着,只要选择模型或所选项目发生变化,就重新计算该值。

关于java - 使用 TreeItem<Label> 禁用根 JavaFX TreeView<Label> 的子级上的上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60950316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com