您的位置:首页 > 编程语言 > Java开发

java核心技术卷 之事件处理基础

2017-09-11 17:16 337 查看
        任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的亊件。操作环境将这些事件报吿给正在运行的应用程序。如果有事件产生,每个应用程序将决定如何对它们做出响应。在Visual Basic这样的语言中,事件与代码之间有着明确的对应关系。程序员对相关的特定事件编写代码,并将这些代码放置在过程中,通常人们将它们称为事件过程(event procedure)。例如,有一个名为HelpButton的Visual Basic按钮有一个与之关联的HelpButton_Click事件过程。这个过程中的代码将在点击按钮后执行。每个Visual
Basic的GUI组件都响应一个固定的事件集,不可能改变Visual Basic组件响应的事件集。

        另一方面,如果使用像原始的C这样的语言进行事件驱动的程序设计,那就需要编写代码来不断地检査事件队列,以便査询操作环境报告的内容(通常这些代码被放置在包含很多 switch语句的循环体中)。显然,这种方式编写的程序可读性很差,而且在有些情况下,编码的难度也非常大。它的好处在于响应的事件不受限制,而不像Visual Basic这样的语言,将事件队列对程序员隐藏起来。

        Java程序设计环境折中了 Visual Basic与原始C的事件处理方式,因此,它既有着强大的功能,又具有一定的复杂性。在AWT所知的事件范围内,完全可以控制事件从事件源 (event source)例如,按钮或滚动条,到事件监听器(event listener)的传递过程,并将任何对象指派给事件监听器。不过事实上,应该选择一个能够便于响应事件的对象。这种事件委托模型(event delegation model)与Visual
Basic那种预定义监听器模壞比较
4000
起来更加灵活。

        像Java这样的面向对象语言,都将事件的相关息封装在一个事件对象(event object) 中。在Java中,所有的事件对象都最终派生于java.util.EventObject类。当然,每个事件类型还有子类,例如,ActionEvent 和 WindowEvent。

        不同的事件源可以产生不同类別的事件。例如,按钮可以发送一个ActionEvent对象, 而窗口可以发送WindowEvent对象。 

        综上所述,下而给出AWT事件处理机制的概要:

        1、监听器对象是一个实现/特定监听器接口(listener interface)的类的实例。

        2、事件源是一个能够注册监听器对象并发送事件对象的对象。 

        3、当事件发生时,事件源将事件对象传递给所有注册的监听器。

        4、监听器对象将利用事件对象中的信息决定如何对事件做出响 

        图显示了事件处理类和接口之间的关系。



下面是监听器的一个示例: 

ActionListener listener=...

JButton button = new ]Button(“ok”); 

button.addActionListener(listener);

         现在,只要按钮产生了 —个“动作事件",istener对象就会得到通告。对于按钮来说, 正像我们所想到的,动作事件就是点击按钮。 

         为了实现ActionListener接口,监听器类必须有一个被称为actionPerformed的方法,该 方法接收一个ActionEvent对象参数。

class MyListener iiplements ActionListener {

public void actionPerfoned(ActionEvent event) {

// reaction to button click goes here

}

}

        只要用户点击按钮,JButton对象就会创建一个ActionEvent对象,然后调用listener.actionPerformed (event)传递事件对象可以将多个监听器对象添加到一个像按钮这样的事件源中。这样一来,只要用户点击按钮,按钮就会调用所有监听器的actionPerfoned方法。 

        图显示了件源、事件监听器和事件对象之间的协作关系。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐