在根JavaFX树视图的子级上禁用上下文菜单<;标签>;与TreeItem<;标签>;
此结构中带有在根JavaFX树视图的子级上禁用上下文菜单<;标签>;与TreeItem<;标签>;,java,javafx,treeview,Java,Javafx,Treeview,此结构中带有TreeItem的JavaFX14Treview 根 团体 孩子 团体 孩子 孩子 我在根目录的标签上附加了一个上下文菜单,用于添加和删除组。当没有组使用时,我可以禁用删除组 removeGroupMenuItem.disableProperty().bind(Bindings.isEmpty(treeView.getRoot().getChildren())); 但是,我现在已将上下文菜单附加到每个组的标签,该标签允许添加一个子项或删除所有子项。我的问题是,如果选
TreeItem
的JavaFX14Treview
- 根
- 团体
- 孩子
- 团体
- 孩子
- 孩子
- 团体
标签上附加了一个上下文菜单
,用于添加和删除组。当没有组使用时,我可以禁用删除组
removeGroupMenuItem.disableProperty().bind(Bindings.isEmpty(treeView.getRoot().getChildren()));
但是,我现在已将上下文菜单
附加到每个组的标签
,该标签允许添加一个子项或删除所有子项。我的问题是,如果选择了一个或多个组,如何禁用“删除所有子项”菜单项
我试过不起作用的
removeAllChildrenMenuItem.disableProperty().bind(Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.selectionModelProperty()));
任何想法都欢迎 您的绑定
不会失效,因为您的代码等待更改的是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(…)
在代码中的任何其他位置更改树的选择模型,则必须重新绑定禁用
属性。如果这在代码中很常见,可以向选择模型添加依赖项,使代码如下所示:
Bindings.createBooleanBinding(()->{…},treeView.selectionModelProperty(),treeView.getSelectionModel().getSelectedItems());
这意味着,每当选择模型或所选项目发生变化时,都要重新计算该值。请..查看组件(如Label
)不应用作其他组件(如TreeView
或TreeItem
@M.S)的类型。您能解释一下您的推理吗?模型
表示业务对象。视图
是该对象的视觉表示。当您使用TreeView
时,T
应该是您的模型
@cbm64,我强烈建议您这样做,但它不会直接解决您的问题。