3

JavaFXMenuクラスで、parent を取得できるAPI を見つけることができませんでしたMenuBar。内部 API の使用法を含むヒントは大歓迎です。(JavaFX 8)

背景: 通常、JavaFXNodeはメソッドでその親を与えることができますgetParent()。しかし、MenuMenuItemは から継承しないためNode、この可能性は利用できません。MenuItemクラス (したがってクラスも)Menuには、2 つの類似したメソッドがあります。

  • getParentPopup()親を得るためにContentMenu
  • getParentMenu()親を得るためにMenu

だから私はのようなものを期待していたでしょうがgetParentMenuBar()、そこにはありません。

編集: この API 拡張機能の jira 機能リクエストを見つけました: https://bugs.openjdk.java.net/browse/JDK-8091154

誰かがこれに対する回避策を見つけましたか?

4

1 に答える 1

1

Menu から MenuBar に戻るアクセスが必要な理由を知りたいのですが、解決しようとしている問題は何ですか?

考えられるアプローチの 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 に答える