2015-04-20 57 views
0

我有一个带有上下文菜单的TreeView,除了树为空时以外的所有作品。当树为空时,我想阻止用户显示上下文菜单。当树为空时,JavaFX 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) 
); 

但我不知道如何应用与树视图或任何其他替代使用?

+1

我会尝试用treeCell相同的(如果你已经提供了SSCCE ;-) – kleopatra

回答

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) 
); 
+0

显然,这是行不通的。不,根目录是隐藏的,因为我不想在UI中显示。 – Marcos

+0

@Marcos请参阅更新。 –