注意:见编辑(节省一些时间阅读)
我试图让我的思维导图程序响应快捷键,如 CTRL+RIGHT(重新排序节点)和 TAB(在下一个缩进级别插入子级)。我有一个JPanel
可以处理所有击键的东西。它位于JTabbedPane
可能是键绑定不起作用的原因的内部。我胆怯了,决定只使用KeyListener
.
问题在于,使用上述组合键时,Swing 会自动将焦点转移到其他一些组件上。我宁愿不要手动放置setFocusable(false)
任何地方。我怎样才能完全禁用这些快捷方式,以使焦点不会转移,并且相关KeyEvent
的 s 仍将发送到我的JPanel
?
编辑:我使用了以下代码:
for (int id : new int[] {KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS})
setFocusTraversalKeys(id, Collections.EMPTY_SET);
禁用默认遍历键(尤其是TAB
.)
现在的问题实际上是为什么 CTRL+UP 会导致失去焦点。例如,当按下 CTRL+DOWN 时,它很好。该组件按预期运行。但是使用 CTRL+UP,它会按预期工作,然后焦点会以某种方式转移/丢失。谁能说出 CTRL+UP 的含义以及如何在任何地方禁用它?谷歌没有帮助。