注意:查看编辑(节省阅读时间)
我试图让我的思维导图程序响应 CTRL+RIGHT(重新排序节点)和 TAB(在下一个缩进级别插入子项)等快捷键。我有一个 JPanel
来处理所有的击键。它驻留在 JTabbedPane 内部,这可能是导致按键绑定(bind)不起作用的原因。我胆怯了,决定只使用 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 的含义以及如何禁用它(无论它在哪里)? Google 没有提供帮助。
最佳答案
KeyBinding用于 Swing API 中实现的所有
KeyEvents
,可能存在冲突需要覆盖所需的
KeyBindings
、更改使用的键、设置为 null,例如取决于您的要求
关于java - 删除/禁用/覆盖 Swing 的焦点遍历键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16987937/