java 事件處理機制


本講內容
  事件
  事件的概念與事件對象
  事件源
  事件類型

  事件處理機制
  事件處理器(事件處理方法)
  事件監聽器接口與事件監聽器類
  事件監聽器適配器

 

 

一.GUI的設計步驟

1.建立用戶界面
  設計一個頂層容器對象,如JFrame
  確定布局,增加組件
  改變組件顏色、字體

2.增加事件處理
  編寫事件監聽器類(內含事件處理方法)
  在事件源上注冊事件監聽器對象

3.顯示用戶界面

 

 

二.事件處理機制的幾個重要概念

1.事件
  事件是用戶在界面上的一個操作(通常使用各種輸入設備,如:鼠標、鍵盤等來完成)。
  當一個事件發生時,該事件用一個事件對象來表示。事件對象有對應的事件類。不同的事件類描述不同類型的用戶動作。事件類包含在java.awt.event和javax.swing.event包中。

2.事件源
  產生事件的組件叫事件源。在一個按鈕上單擊鼠標時,該按鈕就是事件源,會產生一個ActionEvent類型的事件。

3.事件處理器(事件處理方法)
  事件處理器是一個接收事件對象並進行相應處理的方法。事件處理器包含在一個類中,這個類的對象負責檢查事件是否發生,若發生就激活事件處理器進行處理。

 

4.事件監聽器類
  包含事件處理器,並負責檢查事件是否發生,若發生就激活事件處理器進行處理的類叫做事件監聽器類。其實例就是事件監聽器對象。事件監聽器類必須實現事件監聽器接口或繼承事件監聽器適配器類。
  事件監聽器接口定義了處理事件必須實現的方法。事件監聽器適配器類是對事件監聽器接口的簡單實現。目的是為了減少編程的工作量。
  事件監聽器接口和事件監聽器適配器類也都包含在java.awt.event和javax.swing.event包中。

5.注冊事件監聽器
  為了能夠讓事件監聽器檢查某個組件(事件源)是否發生了某些事件,並且在發生時激活事件處理器進行相應的處理,必須在事件源上注冊事件監聽器。這是通過使用事件源組件的以下方法來完成的:
  addXxxListener(事件監聽器對象)
  Xxx對應相應的事件類。

 

三.事件處理機制——委托事件處理

1.

2.事件處理實例:關閉窗口

 

 

四.監聽器類——MyWindowListener.java

import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;

public class MyWindowListener implements WindowListener {
    …
    public void windowClosing(WindowEvent e) //事件處理器
   {
        e.getWindow().setVisible(false);
        e.getWindow().dispose();
        System.exit(0);   
    }
    …
}

 

五.圖形用戶界面——TestFrame.java

import java.awt.*;
public class TestFrame
{
    public static void main(String [] args)
    {
        
        Frame fr=new Frame(“事件處理實例"); 
        fr.setSize(500,500);            //設置窗口的大小
        fr.setBackground(Color.green);  //設置窗口背景顏色
           //注冊事件監聽器對象,Frame組件對象fr為事件源
           fr.addWindowListener(new MyWindowListener());
        fr.setVisible(true);            //顯示窗口
    }
}

 

六.再論事件處理機制

1.事件、事件監聽器接口、事件監聽器類:
  每一類事件有一個相應的事件監聽器接口,該接口定義了接收和處理事件的抽象方法。實現該接口的類,就是監聽器類。其對象可作為監聽器對象向相應的組件注冊。
  事件的類名通常為:XxxEvent
  對應的事件監聽器接口名通常為:XxxListener
  一個監聽器接口定義了一種以上的抽象事件處理方法(事件處理器)。
  事件監聽器類實現事件監聽器接口,其類名可以由我們自己取。事件監聽器類需要我們自己編寫。

2.一個組件可以注冊一個或多個監聽器對象,事件對象只向已注冊的監聽器對象報告事件的發生。

 

七.事件監聽器類的編寫要點

事件監聽器類應該包括以下兩部分內容:
1.在事件監聽器類的聲明中指定要實現的監聽器接口名,如:
  public class MyListener implements XxxListener {
  … }

2.實現監聽器接口中的事件處理方法,如:
  public void 事件處理方法名(XxxEvent e) {
  ...//處理某個事件的代碼... }
  然后,在一個或多個組件上可以進行監聽器類的實例的注冊。如:組件對象.addXxxListener(MyListener對象);

 

 八.事件處理的編程方法總結

要處理某GUI組件(假定為c)上發生的XXXEvent事件,其通用的編程方法是:
  編寫一個監聽器類,該監聽器類實現了XXXListener接口,(假定監聽器類的類名為MyXXXListener);
  在MyXXXListener中的相應事件處理方法中編寫事件處理代碼(事件處理器)。
  調用GUI組件c的addXXXListener()方法注冊事件監聽器對象。 c.addXXXListener(new MyXXXListener());
  要處理C上的多種事件,可以編寫多個相應的監聽器類,進行多次注冊。也可以編寫一個實現了多個監聽器接口的類,進行一次注冊。

 

九.圖形用戶界面編程技巧

  通常將圖形組件作為類的成員;

  將事件監聽器類寫成GUI類的內部類,方便對組件進行訪問。

 

十.監聽器適配器類

1.JAVA中提供了大部分監聽器接口的適配器類,其目的是簡化事件監聽器類的編寫,監聽器適配器類是對事件監聽器接口的簡單實現(方法體為空),這樣用戶可以把自己的監聽器類聲明為適配器類的子類,從而可以不管其他方法,只需重寫需要的方法。 對應於監聽器接口XxxListener的適配器接口的類名為XxxAdapter。

2.

public class MouseClickHandler extends MouseAdapter{
     public void mouseClicked(MouseEvent e){ …. } 
}

 

十一.事件、接口、適配器與事件處理方法對應表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM