5

私の段階では、プログラムの通常のように上部にメニューバーを挿入しました。ALT キー (矢印キーと一緒に) に、ステージ内の別のコンテキストでいくつかのロジックを与えたいと考えています。しかし、ALT キーと矢印キーを押すたびに、メニューバーのメニューも意図せずナビゲートしてしまいます。

私はそれを避けるか、このニーモニックな動作を完全に無効にしたいと考えています。すべてのメニューの mnemonicParsing プロパティを false に設定できませんでした。私もこのアプローチを試みましたが成功しませんでした:

menubar.addEventFilter(KeyEvent.ANY, e -> e.consume());
4

2 に答える 2

6

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に追加する必要があります。scenemenubar

scene.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        // your desired behavior
        if(event.isAltDown())
            event.consume();
    }
});
于 2016-12-28T16:31:04.403 に答える