3

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

背景:通常任何 JavaFXNode都可以通过方法为您提供它的父级getParent()。但是由于MenuandMenuItem不继承自Node,所以这种可能性不可用。类(因此MenuItem也是Menu类)有两个类似的方法:

  • getParentPopup()得到父母ContentMenu
  • getParentMenu()得到父母Menu

所以我会期待类似的东西getParentMenuBar(),但它不存在。

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

有没有人找到解决方法?

4

1 回答 1

1

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

如本例所示,一种可能的方法是使用 Node 上的任意属性映射来存储从 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();
    }
}
于 2015-03-31T19:27:52.107 回答