JavaFX TreeView 在树为空时隐藏上下文菜单

JavaFX TreeView hide context menu when tree is empty

我有一个带有上下文菜单的 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 或任何其他替代方案?

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

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

否则,如果根项未显示,则如果此根项没有子项,则树可以假定为空,即当 isLeaf() returns 为真时。在这种情况下,绑定将是:

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