簡體   English   中英

<Label>使用 TreeItem</label>在根 JavaFX TreeView 的子項上禁用上下文菜單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM