2010-01-21 258 views
1

我放棄了用於Java的GUI構建器,現在我完全用代碼開發了它們(並非真的很難,只需幾個小時的練習)。現在我正在處理事件處理。在Java中處理事件:它是否需要空的事件處理程序

但我發現,當我嘗試使用一個類來實現一種監聽器類型時,

private class TextAction implements FocusListener 
{ 
    public void focusGained(FocusEvent e) 
    { 
     responseTxt.setText("Got focus"); 
    } 

    public void focusLost(FocusEvent e) 
    { 

    } 

}

我必須提供一個空的動作處理程序(如上)的focusLost,即使我並不需要它,或者我從編輯器nastygram說這是不是一個抽象類並且不會覆蓋FocusLost方法等。

這是否意味着操作處理程序必須爲與偵聽器關聯的每個事件類型顯示操作處理程序,即使該操作不會在程序中使用?

感謝您的任何幫助。

回答

4

JDK中已經有所有標準Listener接口的基類。這些類實現接口的所有方法,但在方法體中不做任何事情。只需將接口名稱從XyzListener更改爲XyzAdapter就可以得到它們。

有了這些適配器,你只需要重寫你真正需要的方法:

private class TextAction extends FocusAdapter 
{ 
    @Override 
    public void focusGained(FocusEvent e) 
    { 
     responseTxt.setText("Got focus"); 
    } 
} 
+1

我強烈建議在那裏添加一個@Override。 – 2010-01-21 03:27:46

+0

當然,你是對的。 – x4u 2010-01-21 03:34:41

2

在Java中的「事件」系統基本上是一個事後的黑客入侵。

所涉及的接口沒有什麼特別之處 - 就像所有接口一樣,您需要實施全部他們的方法。

如果您只想實現其中的一些,則可以從關聯的Adapter類繼承,該類爲您選擇不覆蓋的任何內容提供默認的「無操作」實現。

+1

我也說不太明白它上漲了作爲一種事後,它根本就不是一部分的語言特性(如它是在C# )。 – cletus 2010-01-21 03:17:00

+0

也許我的措辭有點強。我真正得到的是它沒有語言的特定支持。 – 2010-01-21 03:20:17

相關問題