每当我按下AltGr 键时,我MenuItem里面的第一个MenuBar就会收到焦点。这绝不是一种想要的行为——尽管它看起来好像是它本身提供的默认行为。MenuBar
这有点烦人,因为我使用的是瑞典语键盘——这意味着使用该键会调用[]和。{}AltGr
我想,而首先删除功能MenuItem内MenuBar顺利通过按下激活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();
}
});
Run Code Online (Sandbox Code Playgroud)
我通过在窗口的主内容窗格上放置一个事件处理程序来解决此问题,该处理程序查找 ALT_GRAPH 的按键事件并使用它。由于我的处理程序位于场景处理程序之前,因此它应该防止触发菜单焦点行为。大致:
tabPane.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
if (e.getCode() == KeyCode.ALT_GRAPH)
{
e.consume();
return;
}
});
Run Code Online (Sandbox Code Playgroud)
我不确定 AltGr 是否总是显示为 ALT_GRAPH;我相信我已经看到它显示为 ALT 且 e.isControlDown() 为 true,但是如果您的菜单快捷方式都不涉及 Ctrl+Alt,您也可以使用该事件(我猜他们不会,因为它们会由 AltGr 触发,因为它映射到 Windows 上的 Ctrl+Alt)。
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |