2

MenuButton 内の MenuItem に Accelerator をアタッチするにはどうすればよいですか (JavaFX 2.2 を使用)。私は次の方法でそれを試しました:

public class Minimal extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
    primaryStage.setScene(SceneBuilder.create()
        .root(StackPaneBuilder.create()
            .children(MenuButtonBuilder.create()
                  .text("MenuButton")
                  .items(
                    MenuItemBuilder.create()
                      .text("MenuItem A")
                      .accelerator(new KeyCodeCombination(KeyCode.B, KeyCombination.ALT_DOWN))
                      .onAction(new EventHandler<ActionEvent>() {
                          @Override public void handle(ActionEvent e) {
                            System.out.println(e.getEventType() +
                                               " occurred on Menu Item A");
                          }
                        })
                      .build()
                   )
                  .build())
            .build())
        .build());
    primaryStage.show();
}

public static final void main(String[] args)
{
    Minimal.launch(args);
}

}

正常にコンパイルされますが、実行時に KeyCombination を押すと例外が発生します。マウスで MenuItem を選択すると、期待どおりに機能します。例外は次のとおりです (スタック トレースにはさらにメソッド呼び出しがありますが、いずれも私のアプリケーションからのものではありません)。

java.lang.NullPointerException
    at com.sun.javafx.scene.control.skin.MenuButtonSkinBase$5.run(MenuButtonSkinBase.java:306)
    at com.sun.javafx.scene.KeyboardShortcutsHandler.processAccelerators(KeyboardShortcutsHandler.java:296)
    at com.sun.javafx.scene.KeyboardShortcutsHandler.dispatchBubblingEvent(KeyboardShortcutsHandler.java:119)

スタック トレースに「MenuButtonSkinBase」と表示されているため、使用しているすべてのカスタム スタイルを無効にしようとしましたが、うまくいきませんでした。

編集: コードのコンパイルに使用した jdk バージョンの出力は次のとおりです。

java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b11)
Java HotSpot(TM) Client VM (build 23.3-b01, mixed mode, sharing)

前もって感謝します!

4

0 に答える 0