程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA基礎:深入淺析java語言的事件處理

JAVA基礎:深入淺析java語言的事件處理

編輯:關於JAVA
在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){

  ...

  }

  );

  這種方法在實際編程中非常方便。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved