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

标签 java swing focus keylistener

注意:查看编辑(节省阅读时间)

我试图让我的思维导图程序响应 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,例如取决于您的要求

  • 列表KeyBindings by @camickr

关于java - 删除/禁用/覆盖 Swing 的焦点遍历键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16987937/

相关文章:

java - Log4J2 AsyncLogger 正在以高并发填满 LMAX disruptor 的环形缓冲区

java - 如何在页面对象模型类-Java中使用鼠标悬停 Action ?

java - 从另一个类设置 gui 内容

html - 仅使用 css 更改输入焦点的背景颜色

.net - 确定停用表单时激活的去向

java - 我的回文有什么问题?

Java Swing布局问题与代码优化

java - 如何阻止另一个类中的 JComponent?

wpf - 专注于 Canvas 中的边框

java - label.setText() 发生 NullPointerException