【问题标题】:which listener is first invoked to handle the event [closed]首先调用哪个侦听器来处理事件[关闭]
【发布时间】:2013-01-04 18:40:24
【问题描述】:

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

【问题讨论】:

  • 我们在谈论什么活动?
  • 两个相同类型的侦听器都添加到一个源中?我不相信订单是指定​​的。
  • @assylias:ArrayLists 还是 LinkedLists 是实现 actionListeners 的方式吗?
  • 我猜,您正在寻找的是这个 MCQ 问题的答案: 问题:。当添加两个或多个对象作为同一事件的侦听器时,首先调用哪个侦听器来处理该事件? A) 作为监听器添加的第一个对象。 B) 作为监听器添加的最后一个对象。 c) 无法确定首先调用哪个侦听器。 D) 一个给定的事件不可能有多个监听器。答案是 C 无法确定首先调用哪个侦听器。

标签: java actionlistener


【解决方案1】:

在 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中讨论。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      相关资源
      最近更新 更多