首页 百科知识 事件类型和监听器接口

事件类型和监听器接口

时间:2024-02-19 百科知识 版权反馈
【摘要】:9.4.3 事件类型和监听器接口1.监听器一个事件监听器对象负责处理一类事件。在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口。事件监听器接口类的名称与事件类的名称相对应,例如,MouseEvent事件类的监听器接口名为MouseListener。例如,窗口事件接口如下:AWT的组件类中提供注册和注销监听器的方法。3.适配器Java语言类的层次非常分明,它只支持单继承。

9.4.3 事件类型和监听器接口

1.监听器

一个事件监听器对象负责处理一类事件。一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理。在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口。事件监听器接口类的名称与事件类的名称相对应,例如,MouseEvent事件类的监听器接口名为MouseListener。

每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。例如,与键盘事件KeyEvent相对应的接口是:

注意到在本接口中有3个方法,那么Java运行时系统什么时候调用哪个方法呢?其实根据这3个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。当键盘键刚按下去时,将调用keyPressed()方法执行;当键盘键弹起来时,将调用keyReleased()方法执行;当键盘键敲击一次时,将调用keyTyped()方法执行。

例如,窗口事件接口如下:

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

public void addXxxListener();

(2)注销监听器

public void removeXxxListener();

例如,Button类中的相关方法:

总结一下,组件、监听器接口和方法的对应关系如表9-1所示。

表9-1 组件、监听器接口和方法的对应关系

说明:处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程如下。

①编写一个实现了XxxListener接口的事件监听器类。

②在XxxListener类中用于处理该事件情况的方法中,编写处理代码。

③调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上。

2.用内部类实现事件处理

在前面讲解了内部类(Inner Class)的概念,其实内部类的一个主要应用就在于图形用户界面开发中的事件处理。

内部类是被定义于另一个类中的类,使用内部类的主要原因是由于:

·一个内部类的对象可访问外部类的成员方法和变量,包括私有的成员;

·实现事件监听器时,采用内部类、匿名类编程非常容易实现其功能;

·编写事件驱动程序,内部类很方便。

因此,内部类所能够应用的地方往往是在AWT的事件处理机制中。

【例9-8】 使用成员内部类实现事件的范例,完成鼠标的拖动事件。鼠标拖动的位置坐标信息显示在输入框中。

程序运行结果如图9-10所示。

图9-10 成员内部类

也可以使用匿名内部类(Anonymous Inner Class)实现事件监听器。当一个内部类的类只是在创建此类对象时用了一次,而且要产生的新类需继承于一个已有的父类或实现一个接口时,才能考虑用匿名类,由于匿名类本身无名,因此它也就不存在构造方法,它需要显式地调用一个无参的父类的构造方法,并且重写父类的方法。所谓的匿名,就是该类连名字都没有,只是显式地调用一个无参的父类的构造方法。

【例9-9】 使用匿名类,完成鼠标的拖动事件。鼠标拖动的位置坐标信息显示在输入框中。

程序运行结果如图9-11所示。

图9-11 匿名类的使用

上面两个实例实现的都是完全一样的功能,只不过采取的方式不同。其中例9-8的事件处理类是一个内部类,而例9-9的事件处理类是匿名类。熟悉这两种方式有助于编写图形界面的程序。

3.适配器

Java语言类的层次非常分明,它只支持单继承。为了实现多重继承的能力,Java用接口来实现,一个类可以实现多个接口,这种机制比多重继承具有更简单、更灵活、更强的功能。在AWT中就经常用到适配器(Adapter)声明和实现多个监听器接口。请记住:无论实现了几个接口,接口中已定义的方法必须一一实现,如果对某事件不感兴趣,可以不具体实现其方法,而用空的方法体来代替,但却必须把所有方法都要写上。这样一来会有一些不便,为了解决这个问题,AWT使用了适配器,Java语言为一些Listener接口提供了适配器类。可以通过继承事件所对应的Adapter类,重写所需要的方法,无关的方法则不用实现。事件适配器提供了一种简单的实现监听器的手段,可以缩短程序代码。

下面是一个关于使用鼠标适配器的例子,比如仅仅需要实现鼠标的单击事件。如果使用MouseListener,则需要实现该接口中的所有方法,但是使用适配器类就可以仅仅重载需要的方法。

java.awt.event包中定义的事件适配器类包括以下几个:

·ComponentAdapter(组件适配器);

·ContainerAdapter(容器适配器);

·FocusAdapter(焦点适配器);

·KeyAdapter(键盘适配器);

·MouseAdapter(鼠标适配器);

·MouseMotionAdapter(鼠标运动适配器);

·WindowAdapter(窗口适配器)。

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

我要反馈