我无法在JavaFX Menu
类中找到允许我检索父MenuBar
的API。任何提示,包括内部API的使用都是非常受欢迎的。 (JavaFX 8)
背景:通常任何JavaFX Node
都可以使用方法getParent()
为其父级提供帮助。但由于Menu
和MenuItem
不会从Node
继承,因此无法使用此可能性。 MenuItem
类(以及Menu
类)有两种类似的方法:
getParentPopup()
获取父ContentMenu
getParentMenu()
获取父Menu
所以我会期待像getParentMenuBar()
这样的东西,但它并不存在。
编辑:我刚刚找到了此API扩展程序的jira功能请求: https://bugs.openjdk.java.net/browse/JDK-8091154
有人为此找到了解决方法吗?
答案 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();
}
}