赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

JAVA基础--浅谈Java语言中的事件处理

发布时间:2007.12.14 04:57     来源:赛迪网    作者:执木

在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){
         ...
           }
    ); 
      这种方法在实际编程中非常方便。
     (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Java编程中异常处理的优劣之道 (12-13) · PL/SQL Developer 7.0安装程序 (12-11)
· Java GPS Map应用工具GPSylon (12-11) · 保存Java程序状态及设置之对象序列化 (12-11)
· 新手入门--改进JAVA字符串分解的方法 (12-11) · Java虚拟机类装载--原理、实现与应用 (12-11)
· Static和Final修饰类属性变量及初始化 (12-11) · 关于提高自己JAVA水平的十大技术讨论 (12-11)
· Java基础知识:你是否了解KVM的常量池 (12-11) · 基础:深入解析Java的新特性assertion (12-11)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 信息化市场百家争鸣 SaaS深陷争议“泥潭”
· 提高管理水平 "两栖"CIO应具备的六大能力
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统