熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

java的事件處理

2013-11-15 09:50:29  來源: JSP教程 

  在JAVA程序設計中事件的處理是非常重要的尤其是在需要自定義事件和設計JavaBean時對事件的處理過程有一個完整的認識對於編程是很有幫助的
  
  下面用一個演示性的例子來說明事件及其處理過程
  
  事件的組成
  如果想要自定義一個事件則必須提供一個事件的監聽接口以及一個事件類在JAVA中監聽接口繼承javautilEventListener事件類繼承javautilEventObject很多基本的事件在編程環境中都已經提供可以很方便使用但是在自定義事件中必須要要了解這些
  
  下面是一個事件類的代碼事件類可以向用戶處理程序提供被監聽類的信息
  import javautil*;
  public class PropertyEvent extends EventObject {
  public PropertyEvent(){}
  }
  
  下面是監聽接口的代碼
  import javautil*;
  
  public interface PropertyListener extends EventListener {
  public void propertyChanged(PropertyEvent propertyEvent);
  }
  
  事件的處理機制
  下面是一段簡要的被監聽類代碼通過代碼分析事件處理過程
  import javautil*;
  
  public class Exam {
  private int property;
  //listeners用來存放已注冊的監聽對象
  private Set listeners= new HashSet();
  
  public void addListener(PropertyListener propertyListener){
  //listeners必須保證只能被一個線程訪問
  synchronized(listeners){
  listenersadd(propertyListener);
  }
  }
  public void firePropertyChange(){
  Iterator iterator;
  synchronized(listeners){
  //將listeners中的類名放到iterator
  iterator = new HashSet(erator();
  }
  
  //創建事件類
  PropertyEvent propertyEvent = new PropertyEvent();
  while(iteratorhasNext()){
  PropertyListener propertyListener = (propertyListener) iteratornext();
  //調用用戶的事件處理程序
  propertyListenerpropertyChanged(propertyEvent);
  }
  }
  }
  
  當屬性值發生變化時首先進行內部處理調用firePropertyChange方法產生一個事件對象然後用事件對象為參數來調用用戶的事件處理程序
  
  事件處理的使用
  基本用法
  public Exam exam;
  examaddListener(this);
  public void propertyChange(PropertyEvent event){}
  
  注exam是被監聽對象this為監聽對象是已經實現了接口方法的當前類addListener
  將當前類注冊到listeners
  
  一個被監聽對象可以有多個監聽對象
  
  examaddListener(listener);
  examaddListener(listener);
  這樣當exam的property發生變化時actionListener和actionListener的處理程序都會
  被調用當然listener和listener必須都是已實現接口方法的類
  
  被監聽的對象也可以是實現了方法的接口
  examaddListener(
  new PropertyListener(){
  //用戶定義事件處理過程
  public void propertyChange(PropertyEvent event){
  
  }
  );
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19209.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.