2013-10-26 58 views
0

我碰到过这段代码。我想了解fireStateChanged方法的作用以及它的作用。EventListenerList中的这段代码在Java Swing中意味着什么?

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

回答

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

+0

上面的第一个是'changeListener []',另一个是'ActionListener []'。你能解释一下哪些代码以及这些代码有用吗? –

+0

@ user1988876:请在您的问题中更具体。什么让你困惑? –

相关问题