现在使用的仍是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类中,

可以将业务逻辑写在单独的类/接口中,然后在显示逻辑中调用,降低了耦合,后期好维护。

最新文章

  1. LeetCode: 3Sum
  2. +Load和+initialize方法解析
  3. iOS-数据持久化基础-JSON与XML数据解析
  4. 移植QT到ZedBoard(制作运行库镜像) 交叉编译 分类: ubuntu shell ZedBoard OpenCV 2014-11-08 18:49 219人阅读 评论(0) 收藏
  5. Gradle+Jetty实现静态资源的热部署
  6. 深入Blocks分析
  7. 简单DP-艰难取舍
  8. Java-io流入门到精通详细总结
  9. PC端Web项目开发流程
  10. Kaggle竞赛 —— 泰坦尼克号(Titanic)
  11. 17.kubernete的dashboard
  12. type-of-python作业-判断字符串是否属于回文需要忽略其中的标点、空格与大小写
  13. GarageBand mac怎么剪切音频片段? GarageBand mac使用教程
  14. git ignore 忽略 idea文件
  15. java对图片进行透明化处理
  16. [LeetCode] 596. Classes More Than 5 Students_Easy tag:SQL
  17. 昂达 v891 v1 终于 删除 windows 分区 并且恢复了容量。
  18. jQuery控制元素显示、隐藏、切换、滑动的方法
  19. Docker学习以及镜像制作流程
  20. day77

热门文章

  1. flask logger
  2. 在WinDBG中查看调用栈的命令
  3. PHP 单引号与双引号的区别 SQL中的使用
  4. Struts过滤器
  5. wannafly test D
  6. 性能测试之Jmeter学习(三)
  7. UVa 1645 Count (递推,数论)
  8. npm 的安装与使用
  9. Telnet 对memcached进行数据操作
  10. 51nod1267(双指针)