![](/img/trans.png)
[英]KeyListeners for a JComboBox which is used as a cell editor in a table
[英]Is the order in which KeyListeners will be called guaranteed?
在addKeyListener , removeKeyListener , getKeyListeners或相关教程的文档中,我可能对此缺少明显之处,但是是否可以保证运行添加的键侦听器的顺序? 我希望它们按照添加的顺序运行,但是我看不到在任何地方都指定了它们。
我遇到的情况是我需要向现有Component
添加一个键侦听器,并为特定键覆盖现有的键侦听器。 似乎应该可以通过以下方式做到这一点:
getKeyListeners
查找所有现有的键侦听器。 removeKeyListener
删除每个现有的键侦听removeKeyListener
addKeyListener
添加我的密钥侦听器。 (这仅处理选定的按键,并在事件发生时使用该事件。) addKeyListener
重新添加在第一步中找到的所有关键侦听addKeyListener
。 但是,如果事实证明它不适用于特定的JVM等,则我不想这样做。
我不太了解你的情况。 对我来说,依靠听众被叫的顺序似乎有些模糊。
您是否不仅可以创建检测事件发生时间的键侦听器包装器类,还可以将事件委托给包装的侦听器类(如果合适)?
我认为有更好的方法可以实现您想要的目标,而无需依赖于听众的排序,除非我误解了!
我不知道订单是否得到保证。
但是,您可以稍作修改以使其在大多数情况下都可以使用:将步骤1、2和3保持不变,但将键侦听器列表存储在自定义键侦听器中,并且不要将其添加回组件的侦听器中。
在自定义侦听器内部,在完成自己的处理后,在每种方法中,都调用保存的侦听器的方法。 伪代码:
void keyPressed(event) {
// do some magic
for (listener: savedListeners)
listener.keyPressed(event);
}
我希望它们按照添加的顺序运行,但是我看不到在任何地方都指定了它们。
没有保证的订单。
我相信当前实现的顺序是所有侦听器(不仅是关键侦听器)都以添加它们的相反顺序运行。
查看EventListenerList类,我相信它是用于实现此功能的类。
当然,这很容易测试。 您只需在组件中添加几个侦听器,并在调用每个侦听器时显示一条消息即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.