<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    javaGrowing

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      92 隨筆 :: 33 文章 :: 49 評論 :: 0 Trackbacks
     【導(dǎo)讀】在JAVA程序設(shè)計(jì)中,事件的處理是非常重要的,尤其是在需要自定義事件和設(shè)計(jì)JavaBean時(shí). 本文用一個(gè)演示性的例子來說明事件及其處理過程。

      在JAVA程序設(shè)計(jì)中,事件的處理是非常重要的,尤其是在需要自定義事件和設(shè)計(jì)JavaBean時(shí).對事件的處理過程有一個(gè)完整的認(rèn)識對于編程是很有幫助的。

      下面用一個(gè)演示性的例子來說明事件及其處理過程

      一.事件的組成

      如果想要自定義一個(gè)事件,則必須提供一個(gè)事件的監(jiān)聽接口以及一個(gè)事件類。在JAVA中監(jiān)聽接口繼承java.util.EventListener,事件類繼承java.util.EventObject.很多基本的事件在編程環(huán)境中都已經(jīng)提供可以很方便使用,但是在自定義事件中必須要要了解這些。

      下面是一個(gè)事件類的代碼,事件類可以向用戶處理程序提供被監(jiān)聽類的信息

      import java.util.*;

      public class PropertyEvent extends EventObject {

      public PropertyEvent(){}

      }

      下面是監(jiān)聽接口的代碼

      import java.util.*;

      public interface PropertyListener extends EventListener {

      public void propertyChanged(PropertyEvent propertyEvent);

      }

      二.事件的處理機(jī)制



      下面是一段簡要的被監(jiān)聽類代碼,通過代碼分析事件處理過程

      import java.util.*;

      public class Exam {

      private int property;

      //listeners用來存放已注冊的監(jiān)聽對象

      private Set listeners= new HashSet();

      .....

      public void addListener(PropertyListener propertyListener){

      //listeners必須保證只能被一個(gè)線程訪問

      synchronized(listeners){

      listeners.add(propertyListener);

      }

      }

      public void firePropertyChange(){

      Iterator iterator;

      synchronized(listeners){

      //將listeners中的類名放到iterator

      iterator = new HashSet(listeners).iterator();

      }

      //創(chuàng)建事件類

      PropertyEvent propertyEvent = new PropertyEvent();

      while(iterator.hasNext()){

      PropertyListener propertyListener = (propertyListener) iterator.next();

      //調(diào)用用戶的事件處理程序

      propertyListener.propertyChanged(propertyEvent);

      }

      }

      }當(dāng)屬性值發(fā)生變化時(shí),首先進(jìn)行內(nèi)部處理調(diào)用firePropertyChange方法,產(chǎn)生一個(gè)事件對象然后用事件對象為參數(shù)來調(diào)用用戶的事件處理程序。

      三.事件處理的使用

      1.基本用法

      public Exam exam;

      exam.addListener(this);

      public void propertyChange(PropertyEvent event){...}

      注:exam是被監(jiān)聽對象,this為監(jiān)聽對象,是已經(jīng)實(shí)現(xiàn)了接口方法的當(dāng)前類,addListener 將當(dāng)前類注冊到listeners.

      2.一個(gè)被監(jiān)聽對象可以有多個(gè)監(jiān)聽對象

      exam.addListener(listener1);

      exam.addListener(listener2);

      這樣當(dāng)exam的property發(fā)生變化時(shí),actionListener1和actionListener2的處理程序都會被調(diào)用。當(dāng)然listener1和listener2必須都是已實(shí)現(xiàn)接口方法的類。

      3.被監(jiān)聽的對象也可以是實(shí)現(xiàn)了方法的接口

      exam.addListener(

      new PropertyListener(){

      //用戶定義事件處理過程

      public void propertyChange(PropertyEvent event){

      ...

      }

      );

      這種方法在實(shí)際編程中非常方便
    posted on 2006-09-28 10:45 javaGrowing 閱讀(236) 評論(0)  編輯  收藏 所屬分類: java學(xué)習(xí)
    主站蜘蛛池模板: 亚洲国产精品专区在线观看 | 99视频在线精品免费观看6| AAA日本高清在线播放免费观看| 尤物视频在线免费观看| 无遮挡a级毛片免费看| 免费人成网站永久| 日亚毛片免费乱码不卡一区| 黄色免费在线网址| yy一级毛片免费视频| 国产99视频精品免费视频76| 久久精品免费网站网| 国产一级婬片A视频免费观看| 人人爽人人爽人人片av免费| 人禽伦免费交视频播放| 久久av免费天堂小草播放| 中文字幕一区二区三区免费视频| 免费看少妇高潮成人片| 日韩精品久久久久久免费| 亚洲毛片免费视频| 毛片免费在线观看网站| 国产成人啪精品视频免费网| 男人的天堂亚洲一区二区三区| 免费鲁丝片一级在线观看| 无码欧精品亚洲日韩一区夜夜嗨| 久久久久亚洲AV无码专区网站| 久久精品国产精品亚洲精品| 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲aⅴ无码专区在线观看| 三级片免费观看久久| 青青操免费在线观看| 2019中文字幕在线电影免费| 青娱乐免费视频在线观看| 国产精品国产自线拍免费软件| 亚洲精品亚洲人成在线观看下载| 亚洲伊人久久大香线蕉综合图片| 亚洲成人精品久久| 亚洲人成电影网站色| 中国毛片免费观看| 1000部拍拍拍18勿入免费凤凰福利| 免费观看美女裸体网站| 在线日韩日本国产亚洲|