【问题标题】:JavaFX TreeView hide context menu when tree is empty当树为空时,JavaFX TreeView 隐藏上下文菜单
【发布时间】:2015-04-20 21:44:59
【问题描述】:

我有一个带有上下文菜单的 TreeView,除了树为空时,所有的都可以工作。当树为空时,我想阻止向用户显示上下文菜单。

//Set up context menu and menu items
final ContextMenu contextMenu = new ContextMenu();
final MenuItem miSubir = new MenuItem("Subir");
final MenuItem miBajar = new MenuItem("Bajar");
final MenuItem miBorrar = new MenuItem("Borrar");

//add events from clic on menu items
miBorrar.setOnAction((ActionEvent event) -> {
    ...
});

...

//Add menu items to context menu
contextMenu.getItems().add(miSubir);
contextMenu.getItems().add(miBajar);
contextMenu.getItems().add(miBorrar);

//Associate context menu to treeview
treeEjercicios.setContextMenu(contextMenu);

当我使用 Table 组件时,我解决了以下问题:

row.contextMenuProperty().bind(
        Bindings.when(row.emptyProperty())
        .then((ContextMenu) null)
        .otherwise(contextMenu)
);

但我不知道如何申请使用 TreeView 或任何其他替代方案?

【问题讨论】:

  • 我会尝试对 treeCell 进行同样的操作(如果您提供了 SSCCE ;-)

标签: javafx treeview contextmenu javafx-8


【解决方案1】:

如果显示了根项,即tree.setShowRoot(true),则可以假设当根项为空时,树视图为空。所以我们可以绑定它

tree.contextMenuProperty().bind(
        Bindings.when( Bindings.isNull( tree.rootProperty() ) )
        .then( (ContextMenu) null)
        .otherwise( contextMenu )
);

否则,如果根项没有显示,那么如果该根项没有子项,即当 isLeaf() 返回 true 时,树可以被认为是空的。在这种情况下,绑定将是:

tree.contextMenuProperty().bind(
        Bindings.when( tree.getRoot().leafProperty() )
        .then( ( ContextMenu ) null )
        .otherwise( contextMenu )
);

【讨论】:

  • 显然它不起作用。不,root 是隐藏的,因为我不想在 UI 中显示。
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2017-02-28
  • 2013-07-26
相关资源
最近更新 更多