WEB开发网
开发学院手机开发Android 开发 Java事件模型与Android事件模型的比较 阅读

Java事件模型与Android事件模型的比较

 2010-07-01 14:49:00 来源:WEB开发网   
核心提示:事件最初由事件源产生,事件源可以是GUI组件Java Bean或由生成事件能力的对象,Java事件模型与Android事件模型的比较(2),在GUI组件情况下,事件源或者是组件的同位体(对于Abstract Window Toolkit[awt]GUI组件来说)或组件本身(对于Swing组件来说),java2中已经给我

事件最初由事件源产生,事件源可以是GUI组件Java Bean或由生成事件能力的对象,在GUI组件情况下,事件源或者是组件的同位体(对于Abstract Window Toolkit[awt]GUI组件来说)或组件本身(对于Swing组件来说)。

事件生成后放在系统事件队列内部。现在事件处于事件分发线程的控制下。事件在队列中等待处理,然后事件从事件队列中选出,送到 dispatchEvent()方法,dispatchEvent()方法调用processEvent()方法并将事件的一个引用传递给 processEvent()方法。

此刻,系统会查看是否有送出事件的位置,如果没有这种事件类型相应的已经注册的监听器,或者如果没有任何组件受到激活来接收事件类型,事件就被抛弃。当然上图显示的是AWTEvent类的子类的生命周期。 dispatchEvent()方法和processEvent()方法把AWTEvent作为一个参数。但对,javax.swing.event并不是AWTEvent子类,而是从EventObject直接继承过来,生成这些事件的对象也会定义fireEvent()方法,此方法将事件送到包含在对象监听器列表内的那种类型的任何监听器。

3.2 Java事件捕获

从上面的分析我们知道,任何事件产生到 dispatchEvent()方法分发方法前,所有的事件都是存放在系统事件的队列中,而且所有的事件都由dispatchEvent()方法来分派。所以只要能重载dispatchEvent()方法就可以获取系统的所有事件,包括用户输入事件。一般来说,系统事件队列的操作对用户来说是可以控制。它在后台自动完成所要完成的事情,使用EventQueue类可以查看甚至操纵系统事件队列。

Java提供了EventQueue类来访问甚至操纵系统事件队列。EventQueue类中封装了对系统事件队列的各种操作,除dispatchEvent()方法外,其中最关键的是提供了push()方法,允许用特定的EventQueue来代替当前的EventQueue。

只要从EventQueue类中派生一个新类,然后通过push()方法用派生类来代替当前的EventQueue类即可。这样,所有的系统事件都会转发到派生EventQueue类。

而在实际的开发中,我们并不关心事件的分派方式,也就是说,并不会重载dispatchEvent(),

因为我们的目的并不是取系统的所有事件,而是对感兴趣的事件(例如,按键,鼠标的按下与释放)进行处理,而这些事件不会凭空产生,是由事件源(例如,button,window这些GUI组件产生的)。另一个原因是,java2中已经给我们提供了事件监听这种处理方式,而且是非常安全的,并且也易于开发,

上一页  1 2 3 4 5 6 7  下一页

Tags:Java 事件 模型

编辑录入:coldstar [复制链接] [打 印]
赞助商链接