javaGrowing

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

            在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){

            ...

            }

            );

            這種方法在實際編程中非常方便
          posted on 2006-09-28 10:45 javaGrowing 閱讀(236) 評論(0)  編輯  收藏 所屬分類: java學習
          主站蜘蛛池模板: 陵水| 延安市| 闻喜县| 吴堡县| 蓝田县| 五指山市| 康平县| 沐川县| 石景山区| 德州市| 忻州市| 金山区| 邹城市| 崇阳县| 怀化市| 湖南省| 湛江市| 宝丰县| 楚雄市| 丹棱县| 浦城县| 营口市| 黄平县| 安徽省| 扎赉特旗| 麻阳| 遂溪县| 深泽县| 龙川县| 行唐县| 株洲市| 承德县| 滕州市| 大港区| 招远市| 黑水县| 盘山县| 泗洪县| 长岛县| 韶山市| 清新县|