java的事件處理

來源:互聯網
上載者:User


java的事件處理
cuishibin 原創  (參與分:36,專家分:160)   發表:2003-4-30 下午10:36   版本:1.0   閱讀:4103


    在JAVA程式設計中,事件的處理是非常重要的,尤其是在需要自訂事件和設計JavaBean時.對事件的處理過程有一個完整的認識對於編程是很有協助的。
    下面用一個示範性的例子來說明事件及其處理過程

一.事件的組成 
    如果想要自訂一個事件,則必須提供一個事件的監聽介面以及一個事件類別。在JAVA中監聽介面繼承java.util.EventListener,事件類別繼承java.util.EventObject.很多基本的事件在編程環境中都已經提供可以很方便使用,但是在自訂事件中必須要要瞭解這些。

下面是一個事件類別的代碼,事件類別可以向使用者處理常式提供被監聽類的資訊
import java.util.*;
public class PropertyEvent extends EventObject {
   public PropertyEvent(){}
}
下面是監聽介面的代碼
import java.util.*;

public interface PropertyListener extends EventListener {
   public void propertyChanged(PropertyEvent propertyEvent);
}

二.事件的處理機制

下面是一段簡要的被監聽類代碼,通過程式碼分析事件處理過程
import java.util.*;

public class Exam {
  private int property;
  //listeners用來存放登入的監聽對象
  private Set listeners= new HashSet();
  .....
  public void addListener(PropertyListener propertyListener){
    //listeners必須保證只能被一個線程訪問
    synchronized(listeners){
      listeners.add(propertyListener);
    }
  }
  public void firePropertyChange(){
    Iterator iterator;
    synchronized(listeners){
      //將listeners中的類名放到iterator
      iterator = new HashSet(listeners).iterator();
    } 

    //建立事件類別
    PropertyEvent propertyEvent = new PropertyEvent();
    while(iterator.hasNext()){
      PropertyListener propertyListener = (propertyListener) iterator.next();
      //調用使用者的事件處理常式
      propertyListener.propertyChanged(propertyEvent);
    }
  }
}
    當屬性值發生變化時,首先進行內部處理調用firePropertyChange方法,產生一個事件對象然後用事件對象為參數來調用使用者的事件處理常式。

三.事件處理的使用
    1.基本用法
        public Exam exam;
        exam.addListener(this);
        public void propertyChange(PropertyEvent event){...}

       註:exam是被監聽對象,this為監聽對象,是已經實現了介面方法的當前類,addListener
    將當前類註冊到listeners.
    
    2.一個被監聽對象可以有多個監聽對象

    exam.addListener(listener1);
    exam.addListener(listener2);   
        這樣當exam的property發生變化時,actionListener1和actionListener2的處理常式都會
      被調用。當然listener1和listener2必須都是已實現介面方法的類。
    
    3.被監聽的對象也可以是實現了方法的介面
        exam.addListener(
        new PropertyListener(){
           //使用者定義事件處理過程
           public void propertyChange(PropertyEvent event){
         ...
           }
    ); 
      這種方法在實際編程中非常方便。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.