AWT事件处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。当键盘键刚按下去时,将调用ke yPressed()方法执行;当键盘键抬起来时,将调用keyReleased()方法执行;当键盘键敲击一次时,将调用keyTyped()方法执行。

又例如,窗口事件接口:

public interface WindowListener extends EventListener

{

public void windowClosing(WindowEvent e);

public void windowOpened(WindowEvent e);

public void windowIconified(WindowEvent e);

public void windowDeiconified(WindowEvent e);

public void windowClosed(WindowEvent e);

public void windowActivated(WindowEvent e);

public void windowDeactivated(WindowEvent e);

}

AWT的组件类中提供注册和注销监听器的方法。

(1)注册监听器

public void addXXXListener( );

(2)注销监听器

public void remove XXXListener( );

处理发生在某个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,事件监听器是类ThreeL istener,其中事件源Frame f是类ThreeListener的成员变量。

相关文档
最新文档