提问者:小点点

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


我无法在JavaFX Menu类中找到允许我检索父< code>MenuBar的API。任何提示,包括内部API的用法都非常欢迎。(JavaFX 8)

背景:通常,任何JavaFXNode都可以通过getParent()方法将其作为父节点。但由于MenuMenuItem不是从Node继承的,因此这种可能性不可用。MenuItem类(因此还有Menu类别)有两种类似的方法:

  • getParentPopup()获取父级ContentMenu
  • getParentMenu()获取父级菜单

因此,我本应期待类似于< code>getParentMenuBar()的内容,但它并不存在。

编辑:我刚刚找到了这个API扩展的jira特性请求:https://bugs.openjdk.java.net/browse/JDK-8091154

有没有人找到解决方法?


共1个答案

匿名用户

我会问为什么你需要访问从菜单回到菜单栏,你想解决什么问题?

一种可能的方法是使用 Node 上的任意属性映射来存储从菜单到 MenuBar 的引用,如以下示例所示。

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();
    }
}