java 图形化小工具Abstract Window Toolit 事件处理
事件处理设计到了三个对象:
- EventSource(事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口,菜单等。
- Event (事件封装了GUI组件上发生的特定事情(通常就是一次用户操作)。如果程序需要获得GUI组件上所发生事件的相关信息,都通过Event象来取得。
- EventListener(事件监昕器):负责监听事件源所发生的事件,并对各种事件做出响应处理
3,事件的分类:
事件分为两大类,分别为低级事件和高级事件:
1,低级事件:
低级事件是指基于特定动作的事件,比如进入、点击、拖放等动作的鼠标事件,组件得到焦点、失去焦点时触发焦点事件
- ComponentEvent: 组件事件,当组件尺寸发生变化、位置发生移动、显示 隐藏状态发生改变的时候触发该事件。
- ContainerEvent: 容器事件,当容器里发生添加组件、删除组件时触发该事件。
- WindowEvent: 窗口事件,当窗口状态发生改变(如打开、关闭、最大化、最小化)时触发该事件
- FocusEvent: 焦点事件,当组件得到焦点或失去焦点时触发该事件
- KeyEvent: 键盘事件,当按键被按下、松开、单击时触发该事
- MouseEvent: 鼠标事件,当进行单击、按下、松开、移动鼠标等动作时触发该事件
- PaintEvent: 组件绘制事件,该事件是个特殊的事件类型,GUI组件调update/paint方法来呈现自身时触发该事件,该事件并非专用于事件处理模型
2,高级事件:
高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发该事件的类,比如,在TextField中按Enter会触发ActionEvent件,在滑动条上移动滑块会触发AdjustmentEvent事件,选中列表的某一项会触发ItemEvent事件。
- ActionEvent:动作事件,当按钮、菜单项被单击,在TextField中按 Enter 键时触发该事件。
- AdjustmentEvent: 调节事件,在滑动条上移动滑块以调节数值时触发该事件。
- ItemEvent: 选项事件,当用户选中某项或取消选中某项时触发该事件
- TextEvent: 文本事件,当文本框、文本域里的文本发生改变时触发该事件。
3,AWT事件继承关系图(粗线圈出来的是常用的):
4,事件类型和监听器表:
5、窗口事件:
通过添加窗口事件来关闭窗口:WindowListener 监听器 windowClosing 方法
import java.awt.*; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; /** * @ClassName WindowCloseTest * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/5/6. */ public class WindowCloseTest { public static void main(String[] args) { Frame frame = new Frame("窗口监听器测试"); frame.setBounds(400,300,300,300); WindowListener windowListener = new WindowListener() { @Override public void windowOpened(WindowEvent windowEvent) { System.out.println("窗口被打开"); } @Override public void windowClosing(WindowEvent windowEvent) { System.out.println("窗口关闭中"); System.exit(0); } @Override public void windowClosed(WindowEvent windowEvent) { System.out.println("窗口已关闭"); } @Override public void windowIconified(WindowEvent windowEvent) { System.out.println("窗口最小化了"); } @Override public void windowDeiconified(WindowEvent windowEvent) { System.out.println("窗口已恢复"); } @Override public void windowActivated(WindowEvent windowEvent) { System.out.println("窗口获得焦点"); } @Override public void windowDeactivated(WindowEvent windowEvent) { System.out.println("窗口失去焦点"); } }; frame.addWindowListener(windowListener); frame.setVisible(true); } }
6、事件适配器:
向上面的代码,我们其实只需要用到windowClosing,但是现实是所有的方法都需要重写一遍,很麻烦。事件适配器是监听器接口的空实现,事件适配器实现了事件监听器所有接口,并为该接口里的每个方法都提供了实现,这种实现是一种空实现(方法体内没有任何代码的实现)。当需要创建监听器时,可以通过继承事件适配器,而不是监听器接口。因为事件适配器已经为监听器接口的每个方法提供了空实现,所以程序自己的监听器无须实现监听器接口里的每个方法,只需要重写自己感兴趣的方法,从而可以简化事件监听器的实现类代码。
事件适配器很简单,就是把监听器的Listener修改为Adapter:
比如上面代码修改之后是:
import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class WindowCloseTest { public static void main(String[] args) { Frame frame = new Frame("测试关闭窗口"); WindowListener windowListener = new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.out.println("正在关闭窗口"); System.exit(0); } }; frame.addWindowListener(windowListener); frame.setBounds(100, 100, 400, 400); frame.setVisible(true); } }
事件适配器的常用的几种写法:
(1),用内部类的方式实现
(2),外部类实现
(3),当前类本身实现
(4),匿名内部类实现
posted on 2021-05-06 16:47 zhangmingda 阅读(137) 评论(0) 编辑 收藏 举报