2

我创建了一个JComboBox带有自定义弹出窗口的自定义,它实现了KeyListener. 我希望从 cmbBox 的弹出窗口中选择一个项目,Tab或者Enter因此我setFocusTraversalKeysEnabled(false)为组合框和弹出窗口设置了。

这种方法的问题是,KeyListener当我在容器中使用它时,我必须在组合框中添加另一个以转移焦点。

我可以在我的自定义 JComponent 中触发转移焦点事件(假设)或类似的东西,它将转移其父组件中的焦点,这样我就不必在我使用它的任何地方添加关键侦听器。我用过transferFocus(),但它没有转移焦点。

我还没有弄脏键绑定,但是是否有键绑定可以转移焦点?

谢谢

我正在尝试重新创建一个 sscce,但事实证明这很困难。请承受。

4

1 回答 1

2

Basic Listeners 生命周期即将在真正需要时添加所需的监听器,如果无用则移除监听器

  • 我会建议使用 KeyBindings,因为此侦听器是为 Swing JComponents 指定的,并且您可以(肯定与 KeyListener 相同)将此侦听器添加到具体的 JComponent 或其派生类

  • 您可以将侦听器添加到 firePopupMenuWillBecomeVisible 上的派生弹出窗口

  • 您可以将 ItemListener 添加到派生的 JList

  • 可能不是正确的方法,但可以保护实现到 KeyListener 的所有缺陷,只有 Focus 所有者才能从键盘获取事件,确保 KeyBindings os 的解决方法更加可设置和舒适

注意请阅读此答案

于 2012-04-11T21:05:48.710 回答