Java图形用户界面3—AWT事件模型

    我们编写图形用户界面并不只是为了显示,我们是为了借助图形用户界面来完成我们需要的工作。这就需要程序为我们的动作比如点击按钮,做出响应然后完成我们的工作。在这里我们就用到了事件。

    在Java事件模型中,必须存在事件、事件源、事件处理器三部分。事件是指描述发生了什么事件。事件源指的是产生这个事件的产生器。事件处理器是指接收事件对象、解释事件对象并处理用户交互的方法。

    在Java1.1版本之后Java中的事件模型采用的是委托模型,或者称为授权事件模型。我们首先介绍一下事件监听器,在Java中一个事件监听器就是指事件发生时被通知的对象。它有两个要求:首先,为了可以接收到特殊类型事件的通知,它必须在事件源中已经注册;其次,它必须实现接收和处理通知的方法。

    我们有了事件监听器后,它并不会去监听所对应的事件,也就是我们触发事件后,并不会去调用事件处理器。我们需要先将这个事件监听器注册给这个组件,或者说委托给这个组件。然后我们在事件发生时候,这个事件监听器会被触发,并执行相应的方法处理。

    我们举个例子,理解一下。假如有一个老板,他有一个秘书,他需要频繁的发送文件给某个人,这些事情可以委托给或者授权给秘书去做,一旦有了发送文件的要求,秘书就会去做了。但是如果我们没有委托,我们有这个要求,秘书也并不会去发送文件。

    Java的事件定义在Java.awt.event包中,下图中event结尾的是Java中定义的时间类:

    对应的上面的事件类型,相应的都有事件的监听器类。名称是事件类型+Listener构成。下面我们看一个例子:

    在上一篇文章中我写的那个程序,我们打开之后,我们点击右上角的关闭按钮并不会产生反应。就是因为我们虽然点击关闭按钮触发了一个关闭窗口的事件,但是这个事件并没有委托或者授权给任何一个对象,所以不会产生什么动作。在我刚写的这个例子程序中我们在26—36行,我们创建了一个类实现了WindowListener接口,并且实现了其中的windowClosing方法,这个方法是窗口关闭的时候触发的。下面还有一个方法是windowClosed方法,这个是窗口关闭以后触发的,读者不要混淆。这样我们点击关闭按钮也不会起作用,因为就相当于我们请了一个秘书,但是并没有委托给它任务。所以我们在第8行添加了一行代码,这个表示给窗口f加上一个窗口的监听器,这时候我们点击关闭按钮就会关闭窗口了。

    但是我们可能发现了我们实现窗口监听器MyWindowListener类时候,必须实现WindowListener接口中所有的方法,但是有些方法我们并用不到,我们感觉这样很麻烦。Java的设计人员也考虑了这点,所以设计了Java的适配器类,就是我们第1张图片中Adapter结尾的类。这些类是实现了对应监听器的的适配类,它里面实现了对应接口中的所有方法,但是都只是空实现。这样我们编写我们自己的监听器类的时候只需要继承自对应的适配器类,然后重写对应的方法即可。下面我们修改一个上面程序的监听器类:

    但是并不是所有的监听器接口都有对应的适配器类的,不是的例如ActionListener这个接口就没有对应的适配器类,因为这个接口只有一个方法,如果实现了对应的适配器类,反而是多次一举,并没有简化我们的编程。

    在Java中的事件,不只是我程序中涉及的,还有很多,大家可以自己根据Java的帮助文档详细的学习,只要掌握Java事件模型是授权模型,学习起来就很容易了。

    如果哪里错误,请直接指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值