相关疑难解决方法(0)

何时使用EventListenerList而不是一般的侦听器集合

当我学习如何在Java中激活事件时,我熟悉了EventListenerList.当我创建自己的侦听器时,我编写了侦听器,因此它扩展了EventListener,我将它们存储在EventListenerList中,我的fire方法将通过这样的事件侦听器:

protected void fireChangeOccurred(Change change) {
    Object[] listeners = listenerList.getListenerList();
    for (int i = listeners.length-2; i>=0; i-=2) {
        if (listeners[i]==ChangeListener.class) {
            ((ChangeListener)listeners[i+1]).changeOccurred(change);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在查看只是将侦听器放入HashMap(可能是任何集合)的代码,侦听器接口不会扩展EventListener,而fire方法如下所示:

protected void fireChangeOccurred(Change change) {
    for (ChangeListener listener : listeners) {
        listener.changeOccurred(change);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用EventListenerList而不仅仅是维护我自己的侦听器列表有什么好处?只有侦听器在Swing组件中才真正重要 - 对于事件调度线程是否重要?

java events swing

13
推荐指数
2
解决办法
5665
查看次数

标签 统计

events ×1

java ×1

swing ×1