如何获取JavaFX菜单的父MenuBar

时间:2015-03-31 12:18:10

标签: java javafx scenegraph

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

背景:通常任何JavaFX Node都可以使用方法getParent()为其父级提供帮助。但由于MenuMenuItem不会从Node继承,因此无法使用此可能性。 MenuItem类(以及Menu类)有两种类似的方法:

  • getParentPopup()获取父ContentMenu
  • getParentMenu()获取父Menu

所以我会期待像getParentMenuBar()这样的东西,但它并不存在。

编辑:我刚刚找到了此API扩展程序的jira功能请求: https://bugs.openjdk.java.net/browse/JDK-8091154

有人为此找到了解决方法吗?

1 个答案:

答案 0 :(得分:1)

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

一种可能的方法是使用节点上的arbitrary properties map来存储从Menu到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();
    }
}