您可以在「設計」視圖或 Java Bean 視圖上,將事件新增至元件中。
以雙引數方法所加入的接聽器,是專屬於特定的內容,因此不能重複用於其他內容。 以單引數方法加入的接聽器,則含有 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 中, 則它是專屬於某一個內容,不能重複用在其他內容。在這種情況下,所有的「事件」階式排列功能表子項都會停用。