【问题标题】:Remove/disable/override Swing's focus traversal keys移除/禁用/覆盖 Swing 的焦点遍历键
【发布时间】: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


    【解决方案1】:
    • KeyBinding 用于 Swing API 中实现的所有 KeyEvents,可能存在冲突

    • 需要覆盖所需的KeyBindings,更改使用的密钥,设置为空,即取决于您的要求

    • KeyBindings by @camickr列表

    【讨论】:

    • 感谢您的建议! (查看我的编辑)camickr 的列表能否帮助我确定为什么 CTRL+UP 的行为如此不同?
    • +1,@Tangmeister,你需要知道你在展示什么组件。通常一个组件会将 CTRL+UP/DOWN 绑定在一起,所以奇怪的是一个工作而另一个不工作。我确实注意到 JTabbedPane 以不同的方式绑定这些击键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多