Javafx TreeCell中的静态上下文菜单

Javafx TreeCell中的静态上下文菜单,javafx,javafx-8,Javafx,Javafx 8,在教程中,一个contextMenu被添加到TreeCell中,以允许特定于项的上下文 在这种情况下,可以不为每个单元格创建新的ContextMenu(),而是使ContextMenu成为静态的,并在静态初始值设定项中创建项,例如 private final class TextFieldTreeCellImpl extends TreeCell<String> { private static final ContextMenu addMenu = new ContextM

在教程中,一个contextMenu被添加到TreeCell中,以允许特定于项的上下文

在这种情况下,可以不为每个单元格创建新的ContextMenu(),而是使ContextMenu成为静态的,并在静态初始值设定项中创建项,例如

private final class TextFieldTreeCellImpl extends TreeCell<String> {
    private static final ContextMenu addMenu = new ContextMenu();
    static {
        MenuItem addMenuItem = new MenuItem("Add Employee");
        addMenu.getItems().add(addMenuItem);
        addMenuItem.setOnAction(new EventHandler() {
            public void handle(Event t) {
                TreeItem newEmployee = 
                    new TreeItem<String>("New Employee");
                        getTreeItem().getChildren().add(newEmployee);
            }
        });
    }
私有最终类TextFieldTreeCellImpl扩展了TreeCell{
私有静态最终ContextMenu addMenu=新ContextMenu();
静止的{
MenuItem addMenuItem=新MenuItem(“添加员工”);
addMenu.getItems().add(addMenuItem);
addMenuItem.setOnAction(新的EventHandler(){
公共无效句柄(事件t){
TreeItem newEmployee=
新员工(“新员工”);
getTreeItem().getChildren().add(新员工);
}
});
}

为每个单元格创建一个新的ContextMenu实例有什么好处吗?

很抱歉,这是一个糟糕的例子-显然,人们无法在静态上下文中访问实例属性,例如treeItem-除此之外,我想这在技术上是可以的。另一种方法是在外部构造ContextMenu并调用“addMenu”setter非常有效地使用了相同的ContextMenu实例,这就是我的问题所在。如果上下文菜单不依赖于树项(对于“添加”功能而言,这是正确的),那么这可能是一种更好的方法。不过,通常情况下,您会发现其中需要一些功能,这些功能取决于引发关联菜单的单元格(例如“删除员工”);那么唯一明智的方法是在单元格上使用上下文菜单。@James-嗨,我的问题是在每个单元格实例(1-*)上使用相同的上下文菜单实例是否可以,而不是在每个单元格实例(1-1)上使用新的上下文菜单.我现在明白了-对于每个单元格,都会创建一个menuItem操作事件处理程序并引用此单元格,并且必须在某个点链接到contextMenu对象。只有一个contextMenu实例,我们很容易在弹出窗口中显示多个项。