javaGrowing

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

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

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

            一.事件的組成

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

            下面是一個事件類的代碼,事件類可以向用戶處理程序提供被監(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);

            }

            二.事件的處理機制



            下面是一段簡要的被監(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必須保證只能被一個線程訪問

            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();

            //調用用戶的事件處理程序

            propertyListener.propertyChanged(propertyEvent);

            }

            }

            }當屬性值發(fā)生變化時,首先進行內部處理調用firePropertyChange方法,產生一個事件對象然后用事件對象為參數(shù)來調用用戶的事件處理程序。

            三.事件處理的使用

            1.基本用法

            public Exam exam;

            exam.addListener(this);

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

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

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

            exam.addListener(listener1);

            exam.addListener(listener2);

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

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

            exam.addListener(

            new PropertyListener(){

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

            public void propertyChange(PropertyEvent event){

            ...

            }

            );

            這種方法在實際編程中非常方便
          posted on 2006-09-28 10:45 javaGrowing 閱讀(230) 評論(0)  編輯  收藏 所屬分類: java學習
          主站蜘蛛池模板: 高清| 关岭| 阿瓦提县| 乌兰浩特市| 白沙| 远安县| 隆子县| 乐都县| 平谷区| 阳高县| 邯郸县| 中西区| 广宗县| 秦安县| 巧家县| 天水市| 思茅市| 邵东县| 抚顺市| 桃园县| 厦门市| 阿克陶县| 通城县| 青龙| 东方市| 建昌县| 富裕县| 留坝县| 溧阳市| 浏阳市| 康定县| 黔西县| 尉犁县| 香港 | 象山县| 西乌珠穆沁旗| 建宁县| 龙岩市| 新巴尔虎左旗| 酉阳| 岳阳市|