删除/禁用/覆盖Swing的焦点遍历键

时间:2013-06-07 15:39:09

标签: java swing focus keylistener

注意:请参阅编辑(节省一些时间阅读)

我正在尝试让我的思维导图程序响应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意味着什么以及如何在任何地方禁用它?谷歌没有帮助。

1 个答案:

答案 0 :(得分:2)

  • KeyBinding用于在Swing API中实现的所有KeyEvents,可能存在冲突

  • 需要覆盖必需的KeyBindings,更改使用的密钥,设置为null,e.i。取决于您的要求

  • KeyBindings by @camickr

  • 列表