javafx - 如何禁用 JavaFX MenuBar 的助记符?

标签 javafx menubar keyevent mnemonics alt-key

在我的舞台上,我像往常一样为程序在顶部插入了一个菜单栏。我想在舞台的另一个上下文中给 ALT 键(连同箭头键)一些逻辑。但是每次我按 ALT 和箭头时,我也会无意中浏览菜单栏的菜单。

我想避免这种情况或更好地完全禁用这种助记符行为。
将所有菜单的 mnemonicParsing 属性设置为 false 失败。我也尝试过这种方法但没有成功:

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

最佳答案

当按下 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();
            }
        });
    });
    ...
}


解决方案:

正如您已经猜到的,解决方案是在 ALT 关闭时使用该事件,但您需要将 EventHandler 添加到 scene不是 menubar :
scene.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        // your desired behavior
        if(event.isAltDown())
            event.consume();
    }
});

关于javafx - 如何禁用 JavaFX MenuBar 的助记符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36009964/

相关文章:

java - 尝试定位图像时 setX 和 setY 不起作用

Java菜单栏隐藏背景图像

Java:如何识别特定的字符串

java - 为什么我的按键事件不起作用?

java - keyPressed 方法不工作 Java

PDF 中的 Java 数据

css - JavaFX 对 CSS3 的支持程度

javafx - 在 JavaFX 的 FXML 文件中指定 ResourceBundle

css - Bootstrap 的 'navbar' 宽度限制正在杀死我的菜单

html - CSS Center 全宽导航栏 <ul> 内容