简介
每当我按下 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/