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

时间:2015-04-20 21:45:00

标签: javafx treeview contextmenu javafx-8

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

1 个答案:

答案 0 :(得分:0)

如果显示了根项,即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 )
);