【发布时间】:2013-06-07 15:39:09
【问题描述】:
注意:查看编辑(节省阅读时间)
我试图让我的思维导图程序响应快捷键,如 CTRL+RIGHT(重新排序节点)和 TAB(在下一个缩进级别插入子级)。我有一个处理所有击键的JPanel。它位于 JTabbedPane 内,这可能是键绑定不起作用的原因。我胆怯了,决定只使用KeyListener。
问题在于,使用上述组合键时,Swing 会自动将焦点转移到其他一些组件上。我宁愿不要手动将setFocusable(false) 放在任何地方。我怎样才能完全禁用这些快捷方式,使焦点不会转移,相关的KeyEvents 仍将发送到我的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 的含义以及如何在任何地方禁用它?谷歌没有帮助。
【问题讨论】:
标签: java swing focus keylistener