8.3AWT事件处理

来源:互联网 发布:linux vi 修改并保存 编辑:程序博客网 时间:2024/06/05 23:05
 对于GUI程序与用户操作的交互功能,Java使用了一种自己的专门方式,称之为事件处理机制。首先我们要了解三个概念:事件,事件源,事件处理器。我们必须将一个事件监听器对象同某个事件源的某种事件进行关联,这样,当某个事件源上发生了某种事件后,关联的事件监听器对象中的有关代码才会被执行,我们把这个关联的过程称为向事件源注册事件监听器对象。常用的事件类包括以下几种:

  MouseEvent类对于鼠标事件,包括鼠标按下,鼠标释放,鼠标点击等。

  WindowEvent类对应于窗口事件,包括用户点击了关闭按钮,窗口得到与失去焦点,窗口最小化等。

  ActionEvent类对应一个动作事件,它不是代表一个具体的动作,而是一种语义。

     事件监听器接口的名称与事件的名称是相对应的,非常容易记忆,如MouseEvent的监听器接口的名为MouseListener。WindowEvent的监听器接口名为WindowLinstener,ActionEvent的监听器接口名为ActionListener。

    下面使用时间监听器处理事件:首先我们要编写一个类来实现窗口事件监听器接口,并调用Windows.addWindowListener方法将事件监听器对象注册到Frame类创建的框架窗口上。在WindowListener接口里有七种方法,对应于窗口事件的七种情况,即使我们只使用一种事件,但是其他的事件我们也要给与简单实现,否则就是一个抽象类,不能被实例化。即要处理GUI组件上的XxxEvent事件下的某种情况,首先要编写一个实现了XxxListener接口的事件监听器类,然后在XxxLisener类和要处理的具体事件情况相对应的方法中编写处理程序代码,最后将类XxxListener创建的对象通过addXxxListener方法注册到GUI组件上。Xxx可以使不同的事件。

    由此可知不论我们要写几个事件处理程序,我们都要必须实现事件监听器中所有的抽象方法,这未免有的不尽人意了吧。对于这种利用事件监听器的类处理事件的方法是一种基本的处理方法,但是有的繁琐,我们期待的是一种简单的实现方法,不用管理我们不需要的方法。下面会介绍一种关于使用事件适配器类的方法来实现事件处理的,相对来说比这种方法要简单一些。

为了简化编程,JDK针对大多数事件监听器接口定义了相应的实现类,Java中定义了事件适配器类。在适配器类中,实现了相应监听器接口中所有的方法,但不做任何事情,子类只要适合适配器类,就等于实现了相应的监听器接口,如果要对某类事件进行处理的时候,只要覆盖相应的方法就可以了,其他方法也就不用去实现了。这是间接实现事件监听器接口的方法,这种方法相对来说是比较方便的。

     此外,还可以使用事件监听器的匿名内置类实现方式来实现事件处理。如果一个事件监听器类只用于在一个组件上注册监听器事件对象,为了让程序代码更为紧凑,可以使用匿名内置类的语法来产生这个事件监听器对象,这也是一种经常使用的方法。

     用户的一个操作,在触发了低级事件的同时,可能也会触发语义事件。一般情况下,如果对于语义对象的处理能够满足我们的需求,我们就不必再处理低级事件了。

     一个组件上的一个动作可以产生多种不同类型的事件,因而可以向同一个事件源上注册多种不同类型的监听器。一个事件监听器对象可以注册到多个事件源上,即多个事件源的同一事件都由一个对象统一来处理。一个事件源上也可以注册对同一事件进行处理的多个事件监听器对象,当这一事件发生时,各个事件监听器对象依次被调用。

原创粉丝点击