Javafx 是否停止AltGr触发菜单栏项? 介绍

Javafx 是否停止AltGr触发菜单栏项? 介绍,javafx,Javafx,每当我按下菜单栏时,菜单栏中的第一个菜单项就会收到焦点。这绝不是想要的行为,尽管它看起来像是菜单栏本身提供的默认行为 这有点烦人,因为我在a上-这意味着使用AltGr键调用[]和{} 问题 我想删除该功能,但按下键盘上的AltGr键后,MenuBar中的第一个MenuItem将被激活 研究 像往常一样,我一直在Stackoverflow周围浏览,希望找到答案,但徒劳无功。老实说,由于大多数Stackoverflow没有实际使用瑞典键盘布局,所以以前没有人遇到过这个问题,这并不奇怪 此外 也许有人

每当我按下菜单栏时,菜单栏中的第一个菜单项就会收到焦点。这绝不是想要的行为,尽管它看起来像是
菜单栏本身提供的默认行为

这有点烦人,因为我在a上-这意味着使用AltGr键调用
[]
{}

问题 我想删除该功能,但按下键盘上的AltGr键后,
MenuBar
中的第一个
MenuItem
将被激活

研究 像往常一样,我一直在Stackoverflow周围浏览,希望找到答案,但徒劳无功。老实说,由于大多数Stackoverflow没有实际使用瑞典键盘布局,所以以前没有人遇到过这个问题,这并不奇怪

此外
也许有人在这种情况下的某个地方看到过这样的帖子,在任何其他情况下都将其标记为重复,或者向我和任何可能遇到这个问题的人指出正确的方向,或者简单地用一个有点肤浅的例子来回答这个问题。

查看MenuBarSkin的构造函数,它添加了一个场景事件关键点处理程序,如果涉及Alt的任何按键在到达场景时未被使用,则该处理程序会聚焦菜单:

        // 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_GRAPH的按键事件并使用它,从而解决了这个问题。因为我的处理程序先于场景处理程序,所以应该防止触发菜单焦点行为。大致:

tabPane.addEventFilter(KeyEvent.KEY_PRESSED, e -> {

        if (e.getCode() == KeyCode.ALT_GRAPH)
        {
            e.consume();
            return;
        }
});

我不确定AltGr是否总是显示为ALT_图;我相信我已经看到它显示为ALT,e.isControlDown()为true,但是如果菜单快捷键中没有包含Ctrl+ALT,那么您也可以使用该事件(我猜它们不会,因为它们将由AltGr触发,因为它在Windows上映射为Ctrl+ALT).

我遇到了完全相同的问题,基于上述答案,我能够使用以下代码解决它:

mainAnchorPane.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
        if (e.isAltDown() || KeyCode.ALT_GRAPH == e.getCode()) {
            e.consume();
        }
    });
在我的环境中,当我按下AltGr时,事件报告Ctrl和AltGr按钮按的正是这个顺序。我不在乎Ctrl键,但是Alt键在起作用,所以我用上面的代码杀死了我的两个Alt键