首页 理论教育 JavaAWT事件处理

JavaAWT事件处理

时间:2023-11-16 理论教育 版权反馈
【摘要】:事件处理机制专门用于响应用户的操作,比如,想要响应用户的单击鼠标、按下键盘等操作,就需要使用AWT 的事件处理机制。上面提到的事件对象、事件源、监听器、事件处理器在整个事件处理机制中都起着非常重要的作用,它们彼此之间有着非常紧密的联系。接下来通过图9.11 来描述事件处理的工作流程。

JavaAWT事件处理

1. 事件处理机制

9.1 节中的文件9-1 实现了一个图形化窗口,单击窗口右上角的关闭按钮会发现窗口无法关闭,这说明该按钮的单击功能没有实现。按理说Frame 对象应该实现这个按钮的功能,之所以没有实现,是因为Frame 的设计者无法确定用户关闭Frame 窗口的方式,例如,是直接关闭窗口还是需要弹出对话框询问用户是否关闭。如果想要关闭窗口,就需要通过事件处理机制对窗口进行监听。

事件处理机制专门用于响应用户的操作,比如,想要响应用户的单击鼠标、按下键盘等操作,就需要使用AWT 的事件处理机制。在学习如何使用AWT 事件处理机制之前,首先介绍几个比较重要的概念,具体如下所示:

(1)事件对象(event):封装了GUI 组件上发生的特定事件(通常就是用户的一次操作)。

(2)事件源(组件):事件发生的场所,通常就是产生事件的组件。

(3)监听器(listener):负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。

(4)事件处理器:监听器对象对接收的事件对象进行相应处理的方法。

上面提到的事件对象、事件源、监听器、事件处理器在整个事件处理机制中都起着非常重要的作用,它们彼此之间有着非常紧密的联系。接下来通过图9.11 来描述事件处理的工作流程。

图9.11 事件处理的工作流程

例如,在窗口中有一个按钮,当用户用鼠标单击这个按钮时,会产生ActionEvent 类的一个对象。该按钮就是所谓的事件源,该对象就是鼠标操作所对应的事件,然后事件监听器接受触发的事件,并进行相应处理。事件源是一个组件,当用户进行一些操作时,如按下鼠标或者释放键盘等,都会触发相应的事件,如果事件源注册了监听器,则触发的相应事件将会被处理。

在程序中,如果想实现事件的监听机制,首先需要定义一个实现了事件监听器接口的类,例如Window 类型的窗口需要实现WindowListener。接着通过addWindowListener()方法为事件源注册事件监听器对象,当事件源上发生事件时,便会触发事件监听器对象,由事件监听器调用相应的方法来处理事件。

同一个事件源可能会产生一个或者多个事件,Java 语言采用授权处理机制(DelegationModel)将事件源可能产生的事件分发给不同的事件处理器。例如 Panel 对象可能发生鼠标事件和键盘事件,它可以授权处理鼠标事件的事件处理器来处理鼠标事件,同时也可以授权处理键盘事件的事件处理器处理键盘事件。事件处理器会一直监听所有的事件,直到有与之相匹配的事件,就马上进行相应的处理,因此事件处理器也称为事件监听器。

授权处理机制可以将事件委托给外部的处理对象进行处理,这就实现了事件源与事件处理器(监听器)的分离。通常事件处理者是一个事件类,该类必须实现处理该类型事件的接口,并实现某些接口方法。(www.xing528.com)

【例9.8】下面通过一个案例来实现对文件9-1 中的窗口关闭的功能,如文件9-8 所示。

文件9-8 Example08.java

2. 事件适配器

文件9-8 中的MyWindowListener 类实现WindowListener 接口后,需要实现接口中定义的7 个方法,然而在程序中需要用到的只有windowClosing()一个方法,其他六个方法都是空实现,没有发挥任何作用,这样代码的编写明显是一种多余但又必须的工作。针对这样的问题,JDK 提供了一些适配器类,它们是监听器接口的默认实现类,这些实现类中实现了接口的所有方法,但方法中没有任何代码,程序可以通过继承适配器类来达到实现监听器接口的目的。

【例9.9】下面通过继承适配器类来实现与文件9-8 相同的功能,如文件9-9 所示。

文件9-9 Example09.java

用匿名内部类实现事件处理:文件9-9 通过继承适配器类对事件源对象实现了监听,但在实际开发中,为了代码的简洁,经常通过匿名内部类来创建事件的监听器对象,针对所发生的事件进行处理。

【例9.10】下面通过案例来演示如何为窗口添加一个具有单击事件的按钮,如文件9-10所示。

文件9-10 Example10.java

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈