0

我遇到了这段代码。我想了解该 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这种方法通常出现在许多代码中。所以我想清楚地理解这个概念。非常感谢

4

1 回答 1

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 方法。

于 2013-10-26T03:47:01.037 回答