我创建了一个自定义JComboBox
,其中包含一个实现KeyListener
的自定义弹出窗口。我希望在按下Tab
或Enter
时从cmbBox的弹出窗口中选择一个项目,因此我为组合框和弹出窗口设置了setFocusTraversalKeysEnabled(false)
。
这种方法的问题在于,当我在容器中使用它时,我必须在组合框中添加另一个KeyListener
,以便转移焦点。
我可以在我的自定义JComponent中触发转移焦点事件(假设)或类似的东西,它会将焦点转移到其父组件中,这样我就不必在我使用它的任何地方添加关键监听器。我使用了transferFocus()
,但它没有转移焦点。
我还没有弄清Key Bindings {{3}},但有一个关键的约束来转移焦点吗?
由于
我正在尝试重新创建一个sscce,但证明它很难。请忍受。
答案 0 :(得分:2)
如果确实需要,基本监听器生命周期即将添加必需的监听器,如果无用则删除监听器
我建议使用KeyBindings,因为这个Listener被指定用于Swing JComponents并且确保你可以(确定与KeyListener一样)将这个监听器添加到具体的JComponent或其派生
您可以将监听器添加到firePopupMenuWillBecomeVisible上的派生弹出窗口
您可以将ItemListener添加到派生的JList
可能不正确但保护所有defects implemented to the KeyListener,只有Focus所有者可以从键盘中获取事件,确保KeyBindings的解决方法更具可设定性和舒适性