javafx - 阻止 AltGr 触发菜单栏项目?

标签 javafx

简介

每当我按下 AltGr key 时,MenuBar 中的第一个 MenuItem 就会获得焦点。这绝不是我们想要的行为,尽管它看起来像是 MenuBar 本身提供的默认行为。

这有点烦人,因为我在 Swedish keyboard —意味着 []{} 均使用 AltGr 键调用。

问题

我想删除该功能,而 MenuBar 内的第一个 MenuItem 在按下键盘上的 AltGr 时会被激活。

研究

像往常一样,我一直在 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();
            }
        });

我通过在窗口的主内容 Pane 上放置一个事件处理程序来解决此问题,该处理程序查找 ALT_GRAPH 的按键事件并使用它。由于我的处理程序位于场景处理程序之前,因此它应该防止触发菜单焦点行为。大致:

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

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

我不确定 AltGr 是否总是显示为 ALT_GRAPH;我相信我已经看到它显示为 ALT 且 e.isControlDown() 为 true,但是如果您的菜单快捷方式都不涉及 Ctrl+Alt,您也可以使用该事件(我猜他们不会,因为它们会由 AltGr 触发,因为它映射到 Windows 上的 Ctrl+Alt)。

关于javafx - 阻止 AltGr 触发菜单栏项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702912/

相关文章:

java - 创建可执行 JavaFX 的简单方法?

java - 使用 ffmpeg 为 JavaFX MediaPlayer 生成视频

javafx:如何为此对象编写writeObject()和readObject()?

Java.lang.Class.newInstance() 抛出 IllegalArgumentException

java - javafx 12 中模块未导出异常

JavaFX 只能与 JDK 一起运行

JavaFX Node.lookup() 仅对使用 FXMLLoader 加载的 Parent 中的某些元素返回 null

java - 将图像上的两个点映射到另一个点

javafx - 如何在javafx中使圆形按钮之外的区域不可点击

JavaFX:用于十六进制编码内容的自定义 TextArea