-4

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

4

2 回答 2

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.
    }
}

所以在这种情况下,它实际上是以相反的顺序处理的。该代码符合EventListenerList 的文档,该文档给出了类似的示例。

向后遍历它的原因将在另一篇文章中讨论。

所有这些显然是特定于实现的,不应依赖。

于 2013-01-04T18:53:09.023 回答
0

我相信就是你要找的。简而言之,射击顺序是不确定的。如果您希望确保特定顺序,可以尝试仅添加一个侦听器,然后按所需顺序将事件传递给您的其他侦听器。

于 2013-01-04T18:43:45.677 回答