Java GUI 事件监听
现在使用的仍是AWT的事件模型。涉及到3类对象:
- Event Source:事件源,即事件发生所在的组件
- Event:事件,封装了此次事件的相关信息
- Event Listener:事件监听器,监听事件,发生指定事件时自动调用对应的方法
监听器可以继承接口自己写代码实现,也可以继承适配器(空实现),然后只重写部分方法的实现。
事件可分为2类:
1、低级事件:基于具体的动作,包括
事件 | 触发条件 | 监听器 | 适配器 | 方法 |
KeyEvent 键盘事件 | 按下、松开、单击键盘上的某个键时触发 | KeyListener | KeyAdapter |
keyPressed:按下某个键时触发 keyReleased:松开某个键时触发 keyTyped:单击某个键时触发 |
MouseEvent 鼠标事件 |
MouseListener MouseMotionListener |
MouseAdapter MouseMotionAdapter |
MouseListener的5个方法: mousePressed:按下某个鼠标键时触发 mouseReleased:松开某个鼠标键时触发 mouseClicked:单击某个鼠标键时触发 mouseEntered:鼠标移入该组件时触发 mouseExited:鼠标移出该组件时触发 MouseMotionListener的2个方法: mouseMoved:在该组件上移动鼠标时触发 mouseDragged:在该组件上按下某个鼠标键并移动鼠标时触发,如在画布上画图 |
|
FocusEvent 焦点事件 | 获得焦点、失去焦点时触发 | FocusListener | FocusAdapter |
focusGained:获取焦点时触发 focusLost:失去焦点时触发 |
WindowEvent 窗体事件 |
打开窗口、关闭窗口, 窗口最大化、最小化时触发 |
WindowListener | WindowAdapter |
windowOpened:打开窗口时触发 windowClosing:单击右上角的“X”时触发 windowClosed:调用dispose()释放窗体资源时触发 windowDeactivated:窗口失活(失去焦点)时触发 windowDeiconified:窗口重新获得焦点时触发(恢复) windowActivated:窗口被激活(获得焦点)时触发,首次+恢复 windowIconified:窗口最小化时触发 |
ContainerEvent 容器事件 | 往容器中添加、移除组件时触发 | ContainerListener | ContainerAdapter |
componentAdded:往容器中添加组件时触发 componentRemoved:从容器中移除组件时触发 |
ComponentEvent 组件事件 |
组件的尺寸发生变化、 位置发生改变、 组件被隐藏/显示时触发 |
ComponentListener | ComponentAdapter |
componentResized:组件尺寸发生变化时触发 componentMoved:组件的位置发生改变时触发 componentHidden:组件被隐藏时触发 componentShown:组件被显示时触发 |
PaintEvent 组件绘制事件 | 调用组件的paint()/update()来绘制时触发 |
2、高级事件(语义事件),不和具体的动作关联,只表示发生了该事件,包括:
事件 | 触发条件 | 监听器 | 适配器 | 方法 |
ActionEvent 动作事件 | 按钮、菜单项、输入框被单击/手动Enter时触发 | ActionListener | ActionAdapter | actionPerformed |
AdjustmentEvent 调节事件 | 移动滑块调节数值值触发 | AdjustmentListener | AdjustmentAdapter | adjustmentValueChanged |
ItemEvent | 选中、取消选中某项时触发 | ItemListener | ItemAdapter | itemStateChanged |
TextEvent | 文本框、文本域中的文本发生改变时触发 | TextListener | TextAdapter | textValueChanged |
以上接口中均只有一个抽象方法,若采用匿名内部实现,可使用lambda表达式。
给组件添加事件监听:
component.addXxxListener(XxxListener/XxxAdapter listener);
实现监听器的4种方式:
1、内部类形式实现
在此外部类中,可复用这个监听器,可直接访问外部类中所有的UI组件。
若外部类中有多个组件要使用此监听器,可使用此种方式。
2、匿名内部类形式实现
简便,适合只使用一次的监听器。
3、外部类形式实现
监听器属于特定的GUI界面,使用外部类实现监听器,不利于提高程序的内聚性。
且外部类形式的监听器不能访问其他类代表的GUI界面的组件。
但可以被多个类共享。
不推荐。
4、类本身作为监听器(实现接口、继承改写适配器)
代码混乱,可读性下降,不推荐。
类代表的GUI界面主要负责显示逻辑,尽量不要将业务逻辑直接写在GUI类中,
可以将业务逻辑写在单独的类/接口中,然后在显示逻辑中调用,降低了耦合,后期好维护。
Java GUI 事件监听的更多相关文章
- JAVA GUI 事件监听事件 详解 和 案例.
GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...
- [置顶] java Gui 键盘监听事件
简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- GUI编程笔记(java)05:GUI事件监听机制原理和举例说明
1.事件监听机制: A:事件源 事件发生的地方 B:事件 就是要发生的事情 C:事件处理 就是针对发生的事情做 ...
- JAVA自定义事件监听完整例子---sunfruit[转]
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733628a854d2c90c05f9313071601 ...
- JAVA Swing 事件监听
EventListner 接口 它是一个标记接口,每一个监听器接口扩展.这个类定义在java.util包. 类声明 以下是声明java.util.EventListener接口: public int ...
- Java界面编程—事件监听机制
组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...
- Java事件监听的四种实现方式
1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型. 3.事件监听器: 事件监听器负责监听 ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
随机推荐
- Linux-内存进程和软件安装
1 swap分区 swapon -s 查看swap分区 mkswap 某分区挂载点 swapon -a 分区 激活该swap swapoff 挂载点 取消swap分区 2 内存 free 查看内存空间 ...
- 乐曲主题Musical Themes
SA例题 题面 对于串 \(S\) 的两个子串 \(A\) 和 \(B\) ,满足 \(k = |A| = |B|\),\(\exists c \forall i\, a_i + c=b_i\),且 ...
- 「HNOI2004」「LuoguP2292」L语言(AC自动机
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- 「NOIP2002」「Codevs1099」 字串变换(BFS
1099 字串变换 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知有两个字串 $A$, ...
- IOS造成卡顿的主要原因
1. cellForRowAtIndexPath, 单元格视图重用, 注意尽量让所有视图重用, 只根据单元格row和section的不容更换不同的数据, 而不是每次都生成新的单元格, 这是程序奔溃的前 ...
- 双重检查锁实现单例(java)
单例类在Java开发者中非常常用,但是它给初级开发者们造成了很多挑战.他们所面对的其中一个关键挑战是,怎样确保单例类的行为是单例?也就是说,无论任何原因,如何防止单例类有多个实例.在整个应用生命周期中 ...
- python zlib字符串压缩
在做网络程序时,可以对字符串进行压缩来节省带宽 项目中用到 {"compress": <压缩标记>, "result":[[设备类型.设备ID, 设 ...
- 3.1 HiveServer2.Beeline JDBC使用
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients 一.HiveServer2.Beeline 1.HiveSer ...
- cocos2dx 新手引导
static CCClippingNode* create(); //使用一个节点作为模版创建裁剪节点 static CCClippingNode* create(CCNode *pStencil); ...
- 原创|高逼格企业级MySQL数据库备份方案,原来是这样....
很多人,这里说的是运维工程师们,一提到写某某方案,很是头疼.不是上某度一统搜索,就是同样一句话在N个群全部群发一遍:“有没有某某方案,可以共享一下的吗??求助,各位大佬们”,估计十有八九,全部石沉大海 ...