我无法在JavaFX Menu
类中找到允许我检索父< code>MenuBar的API。任何提示,包括内部API的用法都非常欢迎。(JavaFX 8)
背景:通常,任何JavaFXNode
都可以通过getParent()方法
将其作为父节点。但由于Menu
和MenuItem
不是从Node
继承的,因此这种可能性不可用。MenuItem
类(因此还有Menu
类别)有两种类似的方法:
getParentPopup()
获取父级ContentMenu
getParentMenu()
获取父级菜单
因此,我本应期待类似于< code>getParentMenuBar()的内容,但它并不存在。
编辑:我刚刚找到了这个API扩展的jira特性请求:https://bugs.openjdk.java.net/browse/JDK-8091154
有没有人找到解决方法?
我会问为什么你需要访问从菜单回到菜单栏,你想解决什么问题?
一种可能的方法是使用 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();
}
}