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 )
);
我有一个带有上下文菜单的 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 )
);