一、事件处理
其实,由事件处理这个名字自然就想到MFC中的消息响应机制,就我的体会,它们应该算是南桔北枳的情形吧,我怀疑Java中的事件处理这个"新瓶"应是装的MFC中的消息响应这个"旧酒"。
所谓的"事件"即如键盘按键、鼠标点击等这类由动作或什么导致某个状态改变并需要对这个改变作相应响应的这类改变。我们可以将Java中的事件分为按钮、鼠标、键盘、窗口、其它事件这几大类。
事件处理模型
1. 基于继承的事件处理模型(JDK1.0)
JDK1.0中,事件处理是基于继承的,事件先发送到组件,然后沿容器层次向上传播。没有被组件处理的事件会自动地继续传播到组件的容器。——这个与MFC中的原始事件响应顺序或者多态的响应机制似乎一致,而后面说的基于代理的事件处理机制似乎又与MFC的回调机制一致。
具体的处理方法
调用action()方法或handleEvent()方法来获取程序运行时发生的事件,所有组件发生的事件都在此方法中处理。
2、基于代理的事件处理模型(JDK1。1)
在这个模型中,事件被直接送往产生这个事件的组件,
对于每一个组件注册一个或多个称为监听者的类,这些类包含事件处理器,用来接收和处理这个事件。
监听者就是实现了Listener接口的类。事件是只向注册的监听者报告的对象。每个事件都有一个对应的监听者接口。
在Button对象上用鼠标进行点击时,将发送一个ActionEvent事件。这个ActionEvent事件会被使用addActionListener()方法进行注册的所有ActionListener的actionPerformed()方法接收。
基于代理的事件处理模型的特点
①事件不会被意外地处理。在层次模型中,一个事件可能传播到容器,并在非预期的层次被处理。
②有可能创建并使用适配器(adapter)类对事件动作进行分类。
③有利于把工作分布到各个类中。
重点学习这种事件处理模型
3、事件
事件处理的三要素。
(1)事件源 事件源是一个事件的产生者,如按钮、窗口及文本域等。
(2)事件类型 Java中所有的事件都封装成一个类,这些事件类被集中在java.awt.event包,所有的事件类均继承了AWTEvent类和一个方法——getSouce()方法,该方法返回发生事件的对象。
(3)事件监听器 不同的类型事件发生后,由事件监听器接收事件并调用相应的事件处理方法。所有的事件监听器实际上都是一个java.awt.event包中的接口,引入了java.util.EventListener接口。不同事件类型的监听器具有不同的方法。
事件处理步骤
① 程序加入java.awt.event包:
Import java.awt.event;
② 给所需的事件源对象注册事件监听器:
事件源对象.addXXXListener(XXXListener);
③ 实现相应的方法。如果某个监听器接口包含多个方法,则需要实现所有的方法
例:b2.addActionListener(this)
4、事件Adapters(适配器)
实现每个Listener接口的所有方法的工作量是非常大的,为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。
你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法。
例如,窗口事件对应的监听器为WindowListener,它必须实现多个方法,包括windowOpened()、windowClosed()、windowClosing()、WindowIconfied()、WindowDeiconfied()、WindowActivated()、WindowDeactivated(),这样加大了不必要的编程工作量。
如果继承了WindowAdapter,就只需实现其中某一个或几个方法,不需要实现所有的方法。后面很多的例子都只实现windowClosing()一个方法,目的是在关闭窗口时退出系统。
4.1 按钮事件的处理
点击按钮所发生的事件为动作事件
动作事件对应的事件类是ActionEvent类
动作事件对应的事件监听器为: ActionListener
监听器的主要方法:
actionPerformed(ActionEvent e)发生动作事件时被调用
实现动作事件的操作工程:
第一步,注册动作事件监听器addActionListener(ActionList本文来源gao@!dai!ma.com搞$$代^@码网*ener)。
第二步,实现ActionListener接口的方法:actionPerformed(ActionEvent e)
4.2鼠标事件的处理
触发鼠标事件的事件源通常是一个容器,当鼠标进入、离开容器,或者在容器中单击鼠标、拖动鼠标等操作时,都发生鼠标事件
鼠标事件对应的事件类是MouseEvent类
MouseEvent类中方法:
getX()获取鼠标的X坐标
getY()获取鼠标的Y坐标
getPoint()获取鼠标的位置
鼠标事件对应的事件监听器有两个:MouseListener(或者MouseAdapter)对应鼠标事件,MouseMotionListener(或者MouseMotionAdapter)对应鼠标移动事件。
MouseListener(或者MouseAdapter)的主要方法
MousePressed(MouseEvent e)鼠标按下时的处理方法
MouseReleased(MouseEvent e)鼠标释放时的处理方法
MouseEntered(MouseEvent e)鼠标进入时的处理方法
MouseExited(MouseEvent e)鼠标离开时的处理方法
MouseClicked(MouseEvent e)鼠标点击时的处理方法