Java事件模型的流程理解

其实这个之前自学的时候没好好学,后来好多都涉及事件机制,所以在此以AWT的事件流程为基础进行理解探讨。

为了使图形化界面接受用户的操作,必须给各个组件加上事件处理机制,在事件处理过程中主要涉及三类对象:

1.Event Source(事件源):事件发生的场所,比如AWT的各个组件,如按钮,窗口,菜单等

2.Event(事件):事件封装了GUI组件上发生的特定事情(通常就是一次用户的操作)。如果程序需要获得GUI组件上发生的事件相关信息,都要通过Event对象来获取。

3.Event Listener(事件监听器):负责监听事件源所发生的事件,并对各个事件做出相应的处理。在JavaScript,VB等语言中,事件相应的动作实际上就是一系列的程序语句,一般以方法的形式组织的。但是java是面向对象的编程语言,方法必依赖于对象,所以必须以类的形式表现出来——事件监听器。事件监听器的核心就是它所包含的方法------也称之为:事件处理器(Event Handler)。当事件源上面的事情发生时,事件对象对作为参数传递给事件处理器(即事件监听器的实例方法)。其实就是一哥观察这模式的应用:Event Source通知Event Listener ()其事件Event发生了变化Event Source回调Event Listener方法,告诉Event Listener事件Event发生了变化

一。观察者模式

    1.提供一个观察者接口所有的观察者(事件监听器)都应该实现这个接口

    

public interface Observer
{
    void update( Observable o ,Object arg );//Observable 类型的参数代表被观察对象,也称目标或者主题,事件里面叫事件源
}

Observable是一个抽象基类,被观察者(事件源)应该继承该抽象基类。Observable(可被观察的)类的代码如下;

public abstract class Obervable
{
//用于保存所有绑定的事件监听器
 List<Observabler> observer = new ArrayList<Observer>(); 
public void registObserver(Observer o) //注册观察者    {      observers.add(o);    } public void removeObserver(Observer o) //移除观察者    {      observers.remove(o);    } public void notifyObservers(Object value) //通知注册该被观察对象的所有注册者    {      for(Observer o:obervers)        {         o.update(this,value) //this 表示当前的观察者对象-----Observer,见Observer接口的参数,value<---->Object arg ,显示调用每个观察者的update方法        }    }}
我想看懂了观察者模式应该基本对事件模型流程有了大致了解吧

JAVA事件响应机制

1,先自定义一个事件

public class MyEvent extends java.util.EventObject{
public MyEvent(Object source)
{
super(source);
}
}

2,再自定义一个监听器

public class MyListener implements java.util.EventListener{
//这里是当事件发生后的响应过程
public void EventActivated(MyEvent me)
{
System.out.println("事件已经被触发");
}
}

3,以下这个类为触发事件的事件源

public class MyObject {
private Vector vectorListeners=new Vector();

public synchronized void addMyListener(MyListener ml)
{
vectorListeners.addElement(ml);
}

public synchronized void removeMyListener(MyListener ml)
{
vectorListeners.removeElement(ml);
}

protected void activateMyEvent()
{
Vector tempVector=null;

MyEvent e=new MyEvent(this);

synchronized(this)
{
tempVector=(Vector)vectorListeners.clone();

for(int i=0;i<tempVector.size();i++)
{
MyListener ml=(MyListener)tempVector.elementAt(i);
ml.EventActivated(e);
}
}

}

//定义一个公用方法用于触发事件
public void test()
{
activateMyEvent();
}
}

4,测试类

public class Test {

public static void main(String[] args)
{
MyObject mo=new MyObject();

//注册该事件
mo.addMyListener(new MyListener());

//触发该事件
mo.test();
}
}

      其实观察者模式在java应用中有广泛的应用,比如 主题/订阅者模式下的JMS(Java Message Service,Java消息服务)中间件,就是一哥具体应用,还有本文的事件模型,委派式代理(Delegation):AWT事件源(组件)将事件的处理委托给特定对象(事件监听器),当事件源发生指定的对象时,就通知委托的事件监听器,并由他来处理这个事件。

    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值