如何将加速器附加到 MenuButton 内的 MenuItem(使用 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)
提前致谢!