首先调用哪个侦听器来处理事件

时间:2013-01-04 18:40:24

标签: java actionlistener

当两个或多个对象作为同一事件的侦听器添加时,首先调用哪个侦听器来处理事件? 首先添加的侦听器或最后添加的侦听器。 事件我的意思是AWT事件。

2 个答案:

答案 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正是您所寻找的。简而言之,点火顺序是不确定的。如果您希望确保特定订单,请尝试仅添加其中一个侦听器,并按所需顺序将事件传递给其他侦听器。