如何获取JavaFX菜单的父菜单栏

如何获取JavaFX菜单的父菜单栏,java,javafx,scenegraph,Java,Javafx,Scenegraph,我在JavaFX菜单类中找不到允许我检索父菜单栏的API。欢迎提供任何提示,包括内部API的使用。(JavaFX8) 背景:通常任何JavaFX节点都可以通过方法getParent()为您提供它的父节点。但由于菜单和菜单项不从节点继承,因此这种可能性不可用。MenuItem类(因此也包括菜单类)有两种类似的方法: getParentPopup()获取父级ContentMenu getParentMenu()获取父菜单 所以我本以为会有类似于getParentMenuBar()的东西,但它不存

我在JavaFX
菜单
类中找不到允许我检索父菜单栏的API。欢迎提供任何提示,包括内部API的使用。(JavaFX8)

背景:通常任何JavaFX
节点
都可以通过方法
getParent()
为您提供它的父节点。但由于
菜单
菜单项
不从
节点
继承,因此这种可能性不可用。
MenuItem
类(因此也包括
菜单
类)有两种类似的方法:

  • getParentPopup()
    获取父级
    ContentMenu
  • getParentMenu()
    获取父菜单
所以我本以为会有类似于
getParentMenuBar()
的东西,但它不存在

编辑:我刚刚找到此API扩展的jira功能请求:


有人找到了解决方法吗?

我想问,为什么您需要从菜单返回菜单栏,您想解决什么问题

一种可能的方法是使用on节点存储从菜单到菜单栏的引用,如本例所示

public class MenuToMenuBar extends Application {
    public static void main(String args[]) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        MenuBar bar = new MenuBar();
        stage.setScene(new Scene(bar));
        Menu menu = new Menu("Foo");

        MenuItem menuItem = new MenuItem("Baz");
        menu.getItems().add(menuItem);
        bar.getMenus().add(menu);

        // put a reference back to MenuBar in each Menu
        for (Menu each : bar.getMenus()) {
            each.getProperties().put(MenuBar.class.getCanonicalName(), bar);
        }

        menuItem.setOnAction((e) -> {
            // retrieve the MenuBar reference later...
            System.out.println(menuItem.getParentMenu().getProperties().get(MenuBar.class.getCanonicalName()));
        });
        stage.show();
    }
}

您的应用程序是以编程方式构建的还是通过FXML构建的?我们在ui的大部分使用FXML。是的,我可以通过构建自己的映射来解决这个问题。由于我们使用fxml,我们需要进行一些后期处理:1)遍历场景图并找到
MenuBar
实例,然后2)在
MenuBar.getMenus()上挂接侦听器以保存关系。(如果你真的对我为什么需要这个问题感兴趣,我们应该私下讨论一下,否则会把问题弄得一团糟。当然,我们也在评估其他可能的解决方案,但都有各自的不足之处。)