锁定老帖子 主题: corejava辅导(10--1)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-03
最后修改:2008-12-03
awt事件模型(观察者模式)(重点)
事件模型中,包括事件源对象,事件处理者(事件监听者对象),事件对象。
事件源和事件处理者之间建立了授权关系,事件源类中有一个事件处理者的对象作为属性,也可能是一个事件处理者的集合。
事件对象 事件源————————〉事件处理者
事件模型的机制,事件源对象发送一个消息(事件对象),事件处理者调用相应的方法处理事件。
事件监听器接口中定义的方法,都以事件对象为参数。
一个事件源可以注册多个同类型的监听器,也可以注册多种多个事件监听器,一个事件监听器也可以为多个事件源服务。
了解一下什么是发消息:A,B,C三个类,分别作为事件源,事件处理者,事件对象。在A类中有一个B类的属性或者是一个内容为B类对象的集合,事件源和事件处理者之间的建立了授权关系,在B类需要实现一个自定义的接口,这个自定义的接口继承了EventListener,EventListener接口中没有定义任何方法,EventListener是一个标记接口。实现在自定义接口中定义好的用于事件处理的方法,C类要继承EventObject类。这些方法是以事件对象为参数的b(C c),在A类a(C c)方法中使用B类的对象调用B类中的b(C c)方法,并把事件对象作为参数,并在main方法中用A类的对象调用了a(c)方法,叫做A类对象给B类发送了消息。
例: public class Test{ public static void main(String[] args){ B bt=new B() A at=new A(bt); at.a(new c()); } } class A{ private B b; public A(){} public A(B b){ this.b=b; } public void a(C c){ b.b(c); } }
class B{ public void b(C c){ System.out.println(“this is message ”+c.c()) } }
class C{ public void c (){ System.out.println(“C Object”); } } 事件源对象间接调用了事件监听器的方法,以事件对象为实参传到事件监听器的方法中,事件源给事件监听器的方法发了一个消息(事件对象)。
例子如下: import java.util.*; //事件源类 class A{ private String test; private List li=new ArrayList(); public A(String test){ this.test=test; } public String getTest(){return this.test;} public void addB(B b){ this.li.add(b); } public void removeB(B b){ this.li.remove(b); } public void fire(){ C c=new C(this); Iterator it=li.iterator(); while(it.hasNext()){ B b=(B)it.next(); b.b(c); } } } //事件监听器的接口,要继承EventListener标记接口 interface Blistener extends EventListener{ void b(C c); } //事件监听器,实现接口 class B implements Blistener{ public void b(C c){ A a=(A)c.getSource(); System.out.println(a.getTest()+" "+c.getMessage()); } } //事件对象类 class C extends EventObject{ private String message; public C(Object src){ super(src); } public void setMessage(String message){ this.message=message; } public String getMessage(){return this.message;} } public class Test{ public static void main(String[] args){ A a1=new A("Event"); B b1=new B(); c1.setMessage("Test"); a1.addB(b1);//注册监听器 a1.fire();//发送事件 } } 以上代码只是事例,在引入包之后可以运行。
事件对象继承自EventObject类,并可以通过getSource()方法获得事件源对象,当然需要在构造事件对象时将事件源对象传入,来区分是哪个事件源发出的事件,所以要用事件对象作为参数。
事件源,事件对象,监听器接口,在java.awt包中提供了很多已经定义好的,只需要实现监听接口就好了。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 918 次