0

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

我试图让我的思维导图程序响应快捷键,如 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 的含义以及如何在任何地方禁用它?谷歌没有帮助。

4

1 回答 1

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

  • 需要覆盖 required KeyBindings,更改使用的 Keys,设置为 null,ei 取决于您的要求

  • @camickr的列表KeyBindings

于 2013-06-07T15:50:56.473 回答