如何在禁用遍历键时将焦点转移到自定义组件?

时间:2012-04-11 20:46:59

标签: java swing focus jcombobox key-bindings

我创建了一个自定义JComboBox,其中包含一个实现KeyListener的自定义弹出窗口。我希望在按下TabEnter时从cmbBox的弹出窗口中选择一个项目,因此我为组合框和弹出窗口设置了setFocusTraversalKeysEnabled(false)

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

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

我还没有弄清Key Bindings {{3}},但有一个关键的约束来转移焦点吗?

由于

我正在尝试重新创建一个sscce,但证明它很难。请忍受。

1 个答案:

答案 0 :(得分:2)

如果确实需要,基本监听器生命周期即将添加必需的监听器,如果无用则删除监听器

  • 我建议使用KeyBindings,因为这个Listener被指定用于Swing JComponents并且确保你可以(确定与KeyListener一样)将这个监听器添加到具体的JComponent或其派生

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

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

  • 可能不正确但保护所有defects implemented to the KeyListener,只有Focus所有者可以从键盘中获取事件,确保KeyBindings的解决方法更具可设定性和舒适性

请注意please read this answer