当我学习如何在 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);
}
}
}
现在我正在审查简单地将侦听器放入 HashMap(可以是任何集合)中的代码,侦听器接口不扩展 EventListener,并且 fire 方法如下所示:
protected void fireChangeOccurred(Change change) {
for (ChangeListener listener : listeners) {
listener.changeOccurred(change);
}
}
使用 EventListenerList 而不是仅仅维护我自己的侦听器列表有哪些优点?难道真的只有侦听器位于 Swing 组件中才重要吗?对于事件调度线程重要吗?
EventListenerList
has a method http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/event/EventListenerList.html#getListeners%28java.lang.Class%29, getListeners(Class<T> t)
,专门针对您只对一种事件类型感兴趣的情况。
以下是如何使用它的示例:
protected void fireChangeOccurred(Change change) {
for (ChangeListener listener:
listenerList.getListeners(ChangeListener.class)) {
listener.stateChanged(new ChangeEvent(this));
}
}
如果您选择维护自己的听众集合,我推荐CopyOnWriteArrayList
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)