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. 命令交互方式 图书管理系统 ...
随机推荐
- cygwin Could not create directory '/home/Administrator/.ssh'
在cygwin下运行: ssh-keygen -C "634772208@qq.com" -t rsa 时,出现如下错误: cygwin Could not create dire ...
- 896C
ODT/珂朵莉树 原来这个东西很咸鱼,只能数据随机情况下nloglogn,不过作为卡常还是很好的 大概就是维护区间,值相同的并且连续当成一个区间存在set里,每次区间操作强行分裂就行了. 复杂度因为是 ...
- 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
c++的小细节的地方 原文地址:https://blog.csdn.net/xiaosu123/article/details/5665729 问题描述如下: 有 三个源文件,A.h.B.cpp.C. ...
- 技术胖Flutter第四季-22页面跳转并返回数据
视频地址: https://www.bilibili.com/video/av35800108/?p=23 博客地址: https://jspang.com/post/flutter4.html#to ...
- 一步步完成“迷你版” 的ASP.NET Core框架
一 前言 Artech 分享了 200行代码,7个对象--让你了解ASP.NET Core框架的本质 . 用一个极简的模拟框架阐述了ASP.NET Core框架最为核心的部分. 这里一步步来完成这个迷 ...
- Linux命令之清空当前文件
vi进入文件 英文状态下按下 / 输入 %d 执行 清空当前文件 over!O(∩_∩)O哈哈~
- 51nod1276(xjb)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 题意:中文题诶- 思路:xjb 通过画图可以发现对于当前 ...
- 洛谷P1291 百事世界杯之旅
P1291 百事世界杯之旅 题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听, ...
- uoj#275. 【清华集训2016】组合数问题(数位dp)
传送门 假设有\(k|{n\choose m}\),因为\(n!\)中质因子\(k\)的次数为\(S(n)=\left\lfloor\frac{n}{k}\right\rfloor+\left\lfl ...
- __enter__,__exit__
目录 上下文管理协议 模拟open 优点 我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼 ...