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. 命令交互方式 图书管理系统 ...
随机推荐
- Opencv— — Twirl Filter
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- eclipse 查找controller
一.打开eclipse: 二.同时按住Ctrl + Shift + R ; 弹出框如下: 在红色输入框内输入controller 名字即可. 查找控制器里面的方法:Ctrl + O
- POJ2274(后缀数组应用)
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 25272 Accepted: 10 ...
- tty初探 — uart驱动框架分析
写在前面: 我们没有讲UART驱动,不过我们认为,只要系统学习了第2期,应该具备分析UART驱动的能力,小编做答疑几年以来,陆陆续续有不少人问到UART驱动怎么写,所以今天就分享一篇深度长文(1700 ...
- dockerfile_nginx+PHP+mongo数据库_完美搭建
基于dockerfile创建nginx+PHP+mongo数据库_完美搭建 第一步: 从git上:git clone http://git.oursdata.com/wangyue/d ...
- ++i和i++的效率孰优孰劣
在内建数据类型的情况下,效率没有区别: 在自定义数据类型的情况下,++i效率更高! 分析: (自定义数据类型的情况下) ++i返回对象的引用: i++总是要创建一个临时对象,在退出函数时还要销毁它,而 ...
- <正则吃饺子> :关于新项目的环境搭建(一)
来到新的公司,需要使用myeclipse.maven.svn.tomcat.mysql: 对于先前一直只用 netbeans 的我,在这里把环境搭建 的情况记录下来.来加深自己的学习和帮助后来者. 第 ...
- 3-2带命令行参数的Java
命令行参数: 主方法Main 小括号里面的内容就是命令参数: String[] args class ArgsDemo{ public static void main(String[] args){ ...
- Lightoj1003【判环操作】
题意: 对于n个给出字符串a,b,理解成a在b之前办好这个事情,要求n个给出两个串,a都要在b之前完成: 题意: 所以一旦出现环就不行了: 以前在写最短路的时候,spfa就有一个判环,后来写着写着写到 ...
- Dota2技能系统设计分析
http://blog.csdn.net/langresser_king/article/details/46776701 前两周写完了新游戏的技能系统.虽然也算灵活,但是跟Dota2的技能系统设计比 ...