2013-10-26 86 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:請在您的問題中更具體。什麼讓你困惑? –

相關問題