事件处理
GUI程序是事件驱动程序,因此我们需要学习Java的事件处理
常见的事件包括
- 移动鼠标
- 单双击鼠标各个按钮
- 单击按钮
- 在文本字段输入
- …
Swing通过事件对象来包装事件,程序可以通过事件获取事件的有关信息
事件处理的几个要素
-
事件源
- 与用户进行交互的GUI组件,表示事件来自于哪个组件或对象
- 比如要对按钮被按下这个事件编写程序,按钮就是事件源
- 提供注册监听器或取消注册监听器的方法
- 如有事件发生,已注册的监听器就会被通知
- 一个事件源可以注册多个监听器,每个事件监听器又可以响应多种事件
-
事件监听器
- 负责监听事件并做出响应
- 一旦它监视到事件发生,就会自动调用相应的事件处理程序作出响应
- 是一个对象,通过事件源的addxxxListener方法被注册到某个事件源上
- 不同的Swing组件可以注册不同的事件监听器
- 一个事件监听器中可以包含有多种具体事件的专用处理方法
-
事件对象
- 封装了有关已发生的事件的信息
- 例如按钮被按下就是一个要被处理的事件,当用户按下按钮时,就会产生一个事件对象,事件对象中包含事件的相关信息和事件源
- 常用的事件对象有
ActionEvent
,ItemEvent
等等,具体可查阅API文档
上面的基本概念很重要
我们要做的是什么?
- 为事件源注册一个事件监听器
- 实现事件处理方法
接口与适配器
-
事件监听器接口
就是一个抽象类,如果要使用它,必须将其定义的方法都实现
-
事件监听器适配类
如果你不想实现事件监听器接口的所有类,那就继承实现了事件监听器接口的子类(适配器),然后覆盖你想要单独写的事件就可以了
当然,如果你这个类已经继承了其他的类了,这时候没办法再继承这个适配器,你还可以使用匿名的内部类(不用起名,直接New一个,然后向上转型就可以)
看一个程序
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public cla