2013-09-24 35 views
0

我正在研究Java Swing以及如何使用適配器模式處理事件,以便不執行處理事件的所有方法的重寫。有關適用於Java中的Swing事件的適配器模式的一些說明

我發現這個簡單的例子,我想知道有沒有理解它:

import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import javax.swing.JFrame; 

public class Sketcher { 
    JFrame window = new JFrame("Sketcher"); 

    public Sketcher() { 
     window.setBounds(30, 30, 300, 300); 
     window.addWindowListener(new WindowHandler()); 
     window.setVisible(true); 
    } 

    class WindowHandler extends WindowAdapter { 
     public void windowClosing(WindowEvent e) { 
      System.out.println("closing"); 
      window.dispose(); // Release the window resources 
      System.exit(0); // End the application 
     } 
    } 

    public static void main(String[] args) { 
     new Sketcher(); 
    } 
} 

什麼我明白的是:

類包含一個main方法,簡單地科瑞一個新的Sketcher實例。

A 草繪器實例創建新的JFrame只顯示監視器上的框架的對象。

所以當我創建一個新的Sketcher時,創建一個新的JFrame對象。

在這裏,我有我的第一個疑問(這是一個屬的Java疑惑):

我爲什麼不創建JFrame WINDOS繪類的構造函數中的對象?

不管結果如何,在構造函數中,我設置一些屬性對JFrame對象,我添加的WindowListener這個JFrame的。

現在,addWindowListener是一個新的WindowHandler對象,它是處理Windows事件的自定義對象。

現在我有兩種方法可以處理這些事件:

  1. 使用經典聽衆:在這種情況下,我必須實現特定監聽所有可以在JFrame的

    發生的不可能性事件
  2. 使用適配器(如在這種情況下),所以在這種情況下,我使用一個名爲WindowHandler一個內部類擴展類w^indowAdapter。類WindowAdapter包含所有可能的JFrame事件的void方法。所以在WindowHandler我可以只定義我想處理的方法,而不是所有的方法。

它是我的推理權嗎?這是一個很好的教程示例,或者它提出了一些我現在看不到的問題?

TNX

安德烈

回答

1

你的推理是正確的,但這裏有一些注意事項:

  1. 你問的問題爲什麼我不能創建JFrame窗口對象的構造函數中草繪課程?

    編譯器正在爲您做一些工作;它實際上將JFrame的初始化置於您的構造函數中。您也可以將JFrame初始化明確地放置在您的構造函數中。

  2. WindowHandler類不是一個內部類;它可以是任何實施WindowListener或延伸WindowAdapter的課程。

  3. XXXAdapter類在AWT和Swing僅僅是提供無操作相關的接口方便的實現類的命名約定。它們並不是真正的適配器(見下文)。

  4. main執行不在你的幀的類;它可以在任何班級。

通常,我們不喜歡在構造函數中創建一堆東西,特別是如果可能存在副作用的話。最好提供單獨的構建和初始化方法。

特別針對Swing,通常將組件子類化以提供應用程序所需的UI專用化,包括JFrame。但保持業務邏輯分離。

即使swing類被命名爲WindowAdapter,它確實沒有適配適配器模式意義上的任何東西。它提供的是WindowListener接口的所有方法的默認無操作實現,它允許開發人員僅覆蓋他/他感興趣的方法。

所以我會說這比overriding的研究更多適應;後者通常用於make two incompatible APIs work together

+0

Tnx這麼多!我最大的問題是,在線重新連接,我找到很多教程,試圖將Swing適配器與適配器模式(我不知道爲什麼)進行匹配,並且我做了許多混淆因爲我無法說Swing適配器和適配器之間的關係GOF模式!爲什麼網上有很多人嘗試用適配器GOF模式來解釋這個概念對我來說是一種莫大的... – AndreaNobili