將事件新增至元件中

您可以在「設計」視圖或 Java Bean 視圖上,將事件新增至元件中。

如果要將事件新增至元件中,請執行下列動作:
  1. 在 Java Bean 視圖或「設計」視圖中,用滑鼠右鍵按一下該元件。
  2. 從蹦現功能表中按一下事件 蹦現功能表便會顯示該元件的偏好事件。請執行下列其中一個步驟:
    • 按一下該元件的其中一個偏好事件。這時,該事件便會加到元件中。 例如,以 JFrame 來說,偏好事件是 windowClosed 和 windowOpened。
    • 按一下新增事件,開啟「新增事件」視窗。
  3. 如果您開啟了「新增事件」視窗,就會出現一份分類好的事件清單,讓您從中選擇。 請選出您要新增的事件,然後按一下完成
    • 「新增事件」對話框在樹狀結構中,顯示該元件的所有可用事件。 樹狀結構把事件接聽器當作第一層項目, 而每一個接聽器項目的下面,則是該事件可能產生的回呼。
      「新增事件」對話框
    • 您可以使用對話框,來指定您要建立新的接聽器,還是沿用現有的接聽器。 當對話框開啟時,它會分析現有的接聽器,如果找到一個它覺得可以重複使用的接聽器,便以不同的圖示標示它: 事件呈現類別(如果現有的接聽器繼承一個配接器類別), 或者事件呈現(其他的情況)。 在接聽器本身當中,現有事件會顯示一個綠色箭頭green arrow, 而可用事件則會顯示一個不完整的箭頭unevent
    • 您可以指定要沿用現有的接聽器,還是建立新的接聽器。 如果是建立新的接聽器,則可以選擇要讓它繼承配接器類別,還是實作接聽器介面。 如果選項不適用,則圓鈕便會停用。 比方說,如果沒有現成的接聽器,或者雖然選了現成的接聽器,但您所選的事件已在使用中, 則「使用現有的接聽器」便會停用。 如果新的接聽器沒有可用的配接器類別, 則停用繼承:ADAPTER_CLASS_NAME 圓鈕。
    • 如果您在「新增事件」對話框中選取 propertyChange, 就會看到其他選項可以新增回呼。 您可以建立新的接聽器, 利用 addPropertyChange(PropertyChangeListener listener) 方法加入 JavaBean 中。 如果是這樣,則所有的內容事件都會採用接聽器的一般回呼方法 propertyChange(PropertyChangeEvent event)。 有些 JavaBean(例如 Swing 元件)有兩個引數方法 addPropertyChange(String propertyName, PropertyChangeListener listener) 可用,而且依預設, 這兩個方法都會選取,供新的接聽器使用。

      「新增事件」對話框

      以雙引數方法所加入的接聽器,是專屬於特定的內容,因此不能重複用於其他內容。 以單引數方法加入的接聽器,則含有 if 陳述式, 它會在處理每一個內容回呼的邏輯之前,先檢查內容的名稱,如下面的程式碼所示。

      javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
           public void propertyChange(java.beans.PropertyChangeEvent e) {
              if ((e.getPropertyName().equals("font"))) {
                  System.out.println("propertyChange(font)"); 
             }
          }
      });

      此舉可讓以單引數方法加入的 PropertyChangeListener,應用在一個以上的內容(使用多個 if{} 區塊)。

在新增事件時,如果有現成的接聽器可用,回呼方法便會加入其中, 否則便會建立新的接聽器。如果要沿用現有的接聽器,它必須是實作接聽器介面的 JavaBean 上,一個匿名的內部類別才行。 其回呼方法的方法主體必須是空的,或者必須繼承配接器類別, 而且沒有現成的方法可供您要加入的事件回呼使用。 對於內容來說,現有的 PropertyChangeListener 如果是以單引數方法 addPropertyChange(PropertyChangeListener listener) 加入到 JavaBean 中,就會重複使用。 如果它還沒有程式碼,就會加入處理內容。

如果沒有任何候選的現有接聽器,可以加入回呼方法, 則會建立新的接聽器。 這會是一個匿名的內部類別,如果您已經為該事件定義過一個配接器類別, 這個接聽器就會繼承它。 否則,它會實作接聽器介面。 加入事件之後,便會以 //TODO 註解建立一個 Stub 方法。 Stub 方法是程式碼的指示器,它會在發生事件時執行, 您應該變更它,讓它執行您所要的行為。 //TODO 註解會顯示在「作業」視窗中,為未完成的方法加上旗標。 這樣稍後您可以再找到它,等回呼邏輯寫好之後,就移除 //TODO 註解。

在先前的範例中,windowOpened 方法已經存在。 如果這是繼承配接器的接聽器,由於它還沒有 windowClosed 方法,因此會重複使用同一個接聽器。 它會加入 windowClosed(WindowEvent e) 方法, 並且加入 Stub 方法和 //TODO 註解,如下所示。

this.addWindowListener(new java.awt.event.WindowAdapter() {     
        public void windowClosed(java.awt.event.WindowEvent e) {
         System.out.println("windowClosed()"); // TODO Auto-generated stub windowClosed()      
              }      
        public void windowOpened(java.awt.event.WindowEvent e) {         
             callExistingWindowOpenedLogic();     
            }
});

在專家模式下,事件仍然可以加入 JavaBean 中,如上所示,但也可以加入 Java Bean 樹狀結構的接聽器中。 「事件」功能表會顯示接聽器的所有事件回呼方法,而任何已使用的方法則會停用。

「新增」視窗已經關閉

以 PropertyChangeListener 來說,蹦現功能表會顯示 JavaBean 所有的界限內容。 如果 PropertyChangeListener 已使用任何內容,這些內容就會停用。

內容變更接聽器

以單引數方法所加入的接聽器,有一個 if 陳述式,它會在處理每一個內容回呼的邏輯之前,先檢查該內容的名稱,如下述程式碼所示:

javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
    public void propertyChange(java.beans.PropertyChangeEvent e) {         
             if ((e.getPropertyName().equals("font"))) {             
                   System.out.println("propertyChange(font)");         
             }     
          }
    });

此舉可讓以單引數方法加入的 PropertyChangeListener,應用在多個內容上(使用多個 if{} 區塊), 而且在加入第二個和後續的內容回呼時,加入新的 if{} 區塊。

如果 propertyChangeListener 是利用雙引數方法 addPropertyChangeListener(String propertyName, PropertyChangeListener listener),加入到 JavaBean 中, 則它是專屬於某一個內容,不能重複用在其他內容。在這種情況下,所有的「事件」階式排列功能表子項都會停用。

母主題: 利用視覺化編輯器來處理事件

相關概念
Java Bean 視圖

相關作業
刪除元件中的事件
檢視元件的事件
檢視事件的程式碼

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.