AWT事件处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java AWT事件处理
1 AWT事件处理基本概念
AWT事件处理的过程中,主要涉及3类对象。
(1) Event(事件):用户对组件的一个操作,称之为一个事件,以类的形式出现,例如,键盘操作对应的事件类是KeyEvent。其实例在改事件发生时有系统自动产生。
(2) Event Source(事件源):事件发生的场所,通常就是各个组件,例如按钮Button。
(3) Event Monitor(事件监听器):接收事件对象并对其进行处理的类的对象,通常其中某个成员方法对事件进行相应的处理。
事件委托处理模型
图10-10 事件委托处理模型
Java采取了事件委托处理模型(Delegation Model),事件源自己不处理事件,而是把在其自身所有可能发生的事件委托给事件监听器来处理。比如,在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以委托给事件监听器1来处理鼠标事件,同时委托给事件监听器2来处理键盘事件。委托模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。
2 事件
事件分类。
按事件的性质分类
java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。AWT的相关事件继承于java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件。
(1)低级事件
低级事件是指基于组件和容器的事件,当一个组件上发生事件,如鼠标的进入、点击、拖放等,或组件的窗口开关等时,触发了组件事件。
—ComponentEvent(组件事件:组件尺寸的变化、移动);
—ContainerEvent(容器事件:组件增加、移动);
—WindowEvent(窗口事件:关闭窗口、窗口闭合、图标化);
—FocusEvent(焦点事件:焦点的获得和丢失);
—KeyEvent(键盘事件:键按下、释放);
—MouseEvent(鼠标事件:鼠标单击、移动)。
(2)高级事件(语义事件)
高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类。比如,在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,选中项目列表的某一条就会触发ItemEvent事件。
—ActionEvent(动作事件:按钮按下,TextField中按Enter键);
—AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值);
—ItemEvent(项目事件:选择项目,不选择“项目改变”);
—TextEvent(文本事件:文本对象改变)。
3 事件监听器
3.1.事件监听器基本概念
事件监听器通常是一个类,该类必须实现与该事件类型相对应的接口。对应的接口被称为事件监听器接口。事件监听器接口类的名称与事件类的名称相对应,例如,MouseEvent事件类的监听器接口名为MouseListener。
每类事件都有监听器是接口,根据动作来定义方法。例如,与键盘事件KeyEvent相对应的接口是:
public interface KeyListener extends EventListener
{
public void keyPressed(KeyEvent ev);
public void keyReleased(KeyEvent ev);
public void keyTyped(KeyEvent ev);
}
注意到在本接口中有3个方法,那么Java运行时系统什么时候调用哪个方法呢?其实根据这3个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。当键盘键刚按下去时,将调用keyPr essed()方法执行;当键盘键抬起来时,将调用keyReleased()方法执行;当键盘键敲击一次时,将调用k eyTyped()方法执行。
又例如,窗口事件接口:
public interface WindowListener extends EventListener
{
public void windowClosing(WindowEvent e);
处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程如下:(1)编写一个实现了XxxListener接口的事件监听器类;
(2)在XxxListener类中用于处理该事件情况的方法中,编写处理代码;
(3)调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上。
(1)可以声明多个接口,接口之间用逗号隔开。
…implements MouseMotionListener, MouseListener, WindowListener;
(2)可以由同一个对象监听一个事件源上发生的多种事件:
f.addMouseMotionListener(this);
f.addMouseListener(this);
f.addWindowListener(this);
则对象f上发生的多个事件都将被同一个监听器接收和处理。
(3)事件监听器和事件源处在同一个类中。本例中事件源是Frame f,事件监听器是类ThreeLis tener,其中事件源Frame f是类ThreeListener的成员变量。
(4)可以通过事件对象获得详细资料,比如,本例中就通过事件对象获得了鼠标发生时的坐标值。
public void mouseDragged(MouseEvent e)
{
String s="Mouse dragging :X="+e.getX()+"Y="+e.getY();
tf.setText(s);