我遇到了这段代码。我想了解fireStateChanged
方法的作用及其作用。
public abstract class AbstractModel {
private EventListenerList listenerList;
protected EventListenerList getListenerList() {
if (listenerList == null) {
listenerList = new EventListenerList();
}
return listenerList;
}
protected void fireStateChanged() {
ChangeListener[] listeners = getListenerList().getListeners(ChangeListener.class);
if (listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
}
这段代码与上面的fireStateChanged
方法有什么不同?
public void fireActionEvent(ActionEvent evt) {
ActionListener[] listenerList = listeners.getListeners(ActionListener.class);
for(int i = listenerList.length-1; i >= 0; --i)
listenerList[i].actionPerformed(evt);
}
我是使用EventListenerList的初学者。我也阅读了文档。但我不清楚发生了什么。 fireAction
种方法通常出现在许多代码中。所以我想清楚地理解这个概念。非常感谢
答案 0 :(得分:2)
我只看到一个简单的区别。下面的代码仅从侦听器列表中提取ChangeListeners和ChangeListeners,然后触发它们:
protected void fireStateChanged() {
ChangeListener[] listeners = getListenerList().getListeners(ChangeListener.class);
if (listeners.length > 0) {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}
虽然这个从同一个侦听器列表中仅提取ActionListeners,然后触发它们:
public void fireActionEvent(ActionEvent evt) {
ActionListener[] listenerList = listeners.getListeners(ActionListener.class);
for(int i = listenerList.length-1; i >= 0; --i)
listenerList[i].actionPerformed(evt);
}
两种不同类型的侦听器在激活它们时触发的方法中需要不同的参数,因此第一位代码需要创建此Event对象。在第二个中,它们将ActionEvent传递给所有ActionListener,actionPerformed方法。