Swing事件
2021年7月22日大约 3 分钟约 780 字
1. 事件简介
GUI是由事件驱动的,一些常见的事件包括:
- 移动鼠标
- 单/双击鼠标各个按钮
- 单击按钮
- 在文本字段输入
- 在菜单中选择菜单项
- 在组合框中选择、单选和多选
- 拖动滚动条
- 关闭窗口
事件源:表示事件来自哪个对象。
事件监听器:负责监听事件并对相应事件作出响应。
事件对象:Swing通过事件对象来包装事件,程序可以通过事件对象获得事件的有关信息。
程序员要完成任务:
- 为事件源注册一个事件监听器;
- 实现一个事件处理方法;
2. 事件源
事件源的作用:
- 提供注册监听器或取消监听器的方法。
- 维护一个已注册的监听器列表,如有事件发生,就会通知每个已注册的监听器。
一个事件源可以注册多个事件监听器,每个监听器又可以对多种事件进行响应,例如一个JFrame事件源上可以注册:
- 窗口事件监听器,响应
- 窗口关闭
- 窗口最大化
- 窗口最小化
- 鼠标事件监听器,响应
- 鼠标点击
- 鼠标移动
3. 事件监听器
事件监听器是一个对象,通过事件源的addXxxListener
方法被注册到某个事件源上。
不同的Swing组件可以注册不同的事件监听器。
一个事件监听器中可以包含有多种具体事件的专用处理方法。
例如用于处理鼠标事件的监听器接口MouseListener中就包含有对应于鼠标压下、放开、进入、离开、敲击五种事件的相应方法mousePressed, mouseRelease, mouseEntered, mouseExited, mouseClicked,这五种方法都需要一个事件对象作为参数。
4. 事件对象
通常我们用到的事件对象有:
- ActionEvent:发生在按下按钮、选择了一个项目、在文本框中按下回车键
- ItemEvent:发生在具有多个选项的组件上,如JCheckBox, JComboBox
- ChangeEvent:用在可设定数值的拖曳杆上,如JSlider, JProgressBar等
- WindowEvent:用在处理窗口的操作
- MouseEvent:用于鼠标的操作
5. 事件处理
实现事件处理的三种方法:
- 实现事件监听器接口:这种方法需要实现接口中的所有方法。对我们不需要进行处理的事件方法也要列出来,只不过其方法体使用一对空括号。
- 继承事件监听器适配器类:只需要重写我们感兴趣的事件。Swing提供了一些适配器类XxxApapter,这些类含有所有XxxListener中方法的默认实现(就是什么也不做)。
- 使用匿名内部类:特别适用于已经继承了某个父类(例如Applet程序,主类必须继承JApplet类或Applet类),则根据java语法规则,就不能再继承适配器类的情况,而且使用这种方法程序看起来会比较清楚明了。