第16章 事件驅動程序設計

1、事件和事件源
     事件:程序發生了某些事情的信號,外部用戶動作和內部程序動作都可以觸發事件。
     源對象:能創建一個事件並觸發該事件的組件,也稱源組件。
          
     事件對象包含與事件相關的一切屬性。可以使用EVentObject類中的實例方法getSource()獲得事件的源對象。
   
     如果一個組件可以觸發某個事件,那麼這個組件的任意子類都可以觸發同類型的事件。Component是所有GUI組件的父類。

2、監聽器、註冊以及處理事件
     源對象觸發一個事件,對此事件感興趣的對象會處理它。將對此事件感興趣的對象稱爲監聽器,一個對象要稱爲源對象上的事件監聽器,需要兩個條件:監聽器必須是一個監聽器接口的實例,並且必須註冊到源組件。
     
     事件對象包含與事件相關的信息,這些可以使用下圖方法獲得。
          

3、內部類(嵌套類)
     定義在另一個類的範圍內的類,內部類可以像常規類一樣使用。通常,如果內部類只是被外部類使用,那就將該類定義爲內部類。一個內部類有如下特徵:
          ●一個內部類被編譯成一個名爲OuterClassName$InnerClassName.class的類。
          ●內部類可以引用定義在它嵌套的外部類中的數據和方法。
          ●使用可見性修飾符定義內部類時,遵從和應用與在類成員上一樣的可見性規則。
          ●可以將內部類定義爲static,一個static內部類可以使用外部類的名字訪問,一個static類是不能訪問外部類的非靜態成員的。
 
     內部類的應用:
          將從屬類合併到主類中,減少源文件的數量,使類文件更易於組織,因爲所有的類文件都是以主類作爲前綴命名的。
          避免類命名衝突。

4、匿名類監聽器
     監聽器類不被其他應用程序所共享,所以最好將它作爲一個內部類定義在框架中。可以使用匿名內部類簡化內部類監聽器。  

     
     定義監聽器類有很多其他方式,例如可以只創建一個監聽器,將這個監聽器註冊給按鈕,然後讓監聽器檢測出事件源(getSource()方法),即誰觸發了這個事件。
     也可以定義一個自定製框架類實現監聽器接口,並實現監聽器方法。
          如:

5、窗口事件
     Window類的任何一個子類都可能觸發窗口事件:打開窗口、正在關閉窗口、關閉窗口、激活窗口、變成非活動窗口、最小化窗口和還原窗口,WindowListener接口定義了這幾個抽象方法。

6、監聽器接口適配器
     監聽器接口中的訪法都是抽象的,即使程序不關注某些事件,還是必須實現所有方法。爲方便,Java提供方便適配器的支持類,它提供監聽器接口所有方法的默認實現,默認實現只是一個空的程序體。
      
例子如:

7、鼠標事件
   
      

8、按鍵事件
     Java提供KeyListener接口來處理按鍵事件。
     
     僅有一個焦點的組件能夠接收KeyEvent,要使一個組件成爲聚焦的,需要將屬性isFocusable設置爲true。

9、使用Timer類的動畫
     
     一個Timer對象可以作爲ActionEvent事件的源,監聽器必須是ActionListener的實例並且要註冊到Timer對象。可以使用Timer類的唯一一個構造方法創建一個Timer對象,使用addActionListener方法添加其他監聽器,用setDelay方法調整延時。
     如:
          
     
     
(注:截圖來自樑勇《Java語言程序設計》中文版)     
發佈了23 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章