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 閱讀(230) 評論(0)  編輯  收藏 所屬分類: java學習
          主站蜘蛛池模板: 汤原县| 丰镇市| 沙雅县| 固阳县| 巫溪县| 长海县| 普宁市| 泸州市| 新丰县| 伊川县| 甘南县| 保定市| 清水河县| 堆龙德庆县| 新营市| 桂平市| 长丰县| 台东市| 萍乡市| 永靖县| 庆安县| 修文县| 淮安市| 监利县| 易门县| 台北县| 杨浦区| 靖江市| 新余市| 凤庆县| 吐鲁番市| 通州区| 双江| 任丘市| 阿瓦提县| 吉隆县| 镇康县| 红安县| 克东县| 鲜城| 西林县|