注意:请参阅编辑(节省一些时间阅读)
我正在尝试让我的思维导图程序响应CTRL + RIGHT(重新排序节点)和TAB(在下一个缩进级别插入子级)等快捷方式。我有一个JPanel
来处理所有的击键。它位于JTabbedPane
内部,可能导致密钥绑定无法正常工作。我已经胆怯了,决定只使用KeyListener
。
问题在于,使用上述键组合,Swing会自动将焦点转移到其他组件。我宁愿不在任何地方手动放置setFocusable(false)
。如何完全禁用这些快捷方式,以便不会转移焦点,相关的KeyEvent
仍然会发送到我的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意味着什么以及如何在任何地方禁用它?谷歌没有帮助。
答案 0 :(得分:2)
KeyBinding用于在Swing API中实现的所有KeyEvents
,可能存在冲突
需要覆盖必需的KeyBindings
,更改使用的密钥,设置为null,e.i。取决于您的要求