事件处理机制_Java语言程

9.4.1 事件处理机制

事件处理机制采用了委托事件模型(Delegated Event Model)。

前面讲解了如何放置各种组件,使图形界面更加丰富多彩,但是还不能响应用户的任何操作。要使图形界面能够接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及3类对象。

·Event(事件):用户对组件的一个操作,称之为一个事件,以Event类的形式体现,例如,键盘操作对应的事件类是KeyEvent。

·Event Source(事件源):事件发生的场所,通常就是各个组件,例如,按钮(Button)。

·Event Handler(事件处理者):接收事件对象并对其进行处理的对象事件处理器,通常就是某个Java类中负责处理事件的成员方法。(www.guayunfan.com)

例如,如果用户用鼠标单击了按钮对象button,则该按钮button就是事件源,而Java运行时系统会生成ActionEvent类的对象actionEvent,该对象中描述了单击事件发生时的一些信息。然后,事件处理者对象将接收由Java运行时系统传递过来的事件对象actionEvent,并进行相应的处理。事件处理模型如图9-9所示。

java给按钮添加事件的方法 java给按钮添加事件处理_Java

图9-9 事件处理模型

由于同一个事件源上可能发生多种事件,因此,Java采取了授权模型(Delegation Model),事件源可以把其自身所有可能发生的事件分别授权给不同的事件处理者来处理。比如,在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以授权给事件处理者1来处理鼠标事件,同时授权给事件处理者2来处理键盘事件。有时也将事件处理者称为监听器,主要原因也在于监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。事件处理者(监听器)通常是一个类,该类如果能够处理某种类型的事件,就必须实现与该事件类型相对的接口。例如,一个ButtonHandler类之所以能够处理ActionEvent事件,原因在于它实现了与ActionEvent事件对应的接口ActionListener。每个事件类都有一个与之相对应的接口。