当两个或多个对象作为同一事件的侦听器添加时,首先调用哪个侦听器来处理事件? 首先添加的侦听器或最后添加的侦听器。 事件我的意思是AWT事件。
答案 0 :(得分:3)
在Swing中,这些通常使用EventListenerList
对象来实现,这些对象保留了插入顺序(它们由数组支持)。但是,这并不意味着将按该顺序调用侦听器。例如,这是AbstractButton
:
protected void fireStateChanged() {
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length-2; i>=0; i-=2) {
//etc.
}
}
因此,在这种情况下,它实际上是以相反的顺序处理的。该代码符合documentation of EventListenerList,它提供了类似的示例。
this other post中讨论了向后遍历的原因。
所有这些显然都是特定于实施的,不应该依赖。
答案 1 :(得分:0)
我相信this正是您所寻找的。简而言之,点火顺序是不确定的。如果您希望确保特定订单,请尝试仅添加其中一个侦听器,并按所需顺序将事件传递给其他侦听器。