をALT押すと最初にメニューがフォーカスされ、メニューがフォーカスされると、矢印キーALTが押されているかどうかに関係なくメニュー間を移動します。したがって、この動作を防ぐには、ALTが押されたときに最初のメニューがフォーカスされるのを防ぐ必要があります。
MenuBarSkin
クラスのコンストラクターのソース コードを見ると、解決策が得られます。
public MenuBarSkin(final MenuBar control) {
...
Utils.executeOnceWhenPropertyIsNonNull(control.sceneProperty(), (Scene scene) -> {
scene.getAccelerators().put(acceleratorKeyCombo, firstMenuRunnable);
// put focus on the first menu when the alt key is pressed
scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
if (e.isAltDown() && !e.isConsumed()) {
firstMenuRunnable.run();
}
});
});
...
}
解決:
ご想像のとおり、解決策は がダウンしているときにイベントを消費することですが、 EventHandler をnotALTに追加する必要があります。scene
menubar
scene.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
// your desired behavior
if(event.isAltDown())
event.consume();
}
});