我创建了一个自定义 JComboBox
,其中包含实现 KeyListener
的自定义弹出窗口。我希望在按下 Tab
或 Enter
时从 cmbBox 的弹出窗口中选择一个项目,因此我设置了 setFocusTraversalKeysEnabled(false)
对于组合框和弹出窗口。
这种方法的问题是,现在当我在容器中使用它时,我必须向组合框添加另一个 KeyListener
以便转移焦点。
我可以在我的自定义 JComponent 中触发转移焦点事件(假设)或类似的事件,该事件将在其父组件中转移焦点,这样我就不必在使用它的任何地方添加关键监听器。我使用了 transferFocus()
但它没有转移焦点。
我没有弄脏Key Bindings但是有没有键绑定(bind)来转移焦点?
谢谢
我正在尝试重新创建 sscce,但事实证明这很困难。请多多包涵。
最佳答案
基本监听器的生命周期就是如果确实需要的话就添加需要的监听器,如果没有用的话就删除监听器
我建议使用 KeyBindings,因为此监听器是为 Swing JComponent 指定的,并且确保您可以(当然与 KeyListener 相同)将此监听器添加到具体的 JComponent 或其衍生物
您可以将监听器添加到 firePopupMenuWillBecomeVisible 上的派生弹出窗口
您可以将 ItemListener 添加到派生的 JList
也许不是正确的方式,但保护所有人 defects implemented to the KeyListener ,只有 Focus 所有者才能从键盘获取事件,这是 KeyBindings 操作系统的可靠解决方法,更可设置且更舒适
关于java - 禁用遍历键时如何将焦点转移到自定义组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113698/