EventListenerList中的这段代码在Java Swing中意味着什么?

时间:2013-10-26 03:42:04

标签: java swing listener event-listener

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

1 个答案:

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