现在使用的仍是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 事件监听的更多相关文章

  1. JAVA GUI 事件监听事件 详解 和 案例.

    GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...

  2. [置顶] java Gui 键盘监听事件

    简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...

  3. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  4. GUI编程笔记(java)05:GUI事件监听机制原理和举例说明

    1.事件监听机制:       A:事件源          事件发生的地方       B:事件             就是要发生的事情       C:事件处理       就是针对发生的事情做 ...

  5. JAVA自定义事件监听完整例子---sunfruit[转]

    http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733628a854d2c90c05f9313071601 ...

  6. JAVA Swing 事件监听

    EventListner 接口 它是一个标记接口,每一个监听器接口扩展.这个类定义在java.util包. 类声明 以下是声明java.util.EventListener接口: public int ...

  7. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  8. Java事件监听的四种实现方式

    1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型. 3.事件监听器: 事件监听器负责监听 ...

  9. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

随机推荐

  1. 基于WinDbg的内存泄漏分析

    在前面C++中基于Crt的内存泄漏检测一文中提到的方法已经可以解决我们的大部分内存泄露问题了,但是该方法是有前提的,那就是一定要有源代码,而且还只能是Debug版本调试模式下.实际上很多时候我们的程序 ...

  2. poj2828 Buy Tickets——倒序处理

    题目:http://poj.org/problem?id=2828 这题可以倒序来做,因为越靠后的人实际上优先级越高: 用0和1表示这个位置上是否已经有人,0表示有,1表示没有,这样树状数组维护前缀和 ...

  3. Tyvj1052(树形DP)

    P1052 没有上司的舞会 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以 ...

  4. NHibernate从入门到精通系列——NHibernate环境与结构体系

    内容摘要 NHibernate的开发环境 NHibernate的结构体系 NHibernate的配置 一.NHibernate的开发环境 NHibernate的英文官方网站为:http://nhfor ...

  5. MongoDB -- 安装(win 10)

    1. 下载安装包: mongodb-win32-x86_64-2008plus-ssl-4.0.10-signed.msi https://www.mongodb.com/download-cente ...

  6. 2.11-2.12 HBase的数据迁移常见方式

    一.importtsv 把hdfs中数据抽取到HBase表中: 1.准备数据 ##student.tsv [root@hadoop-senior datas]# cat student.tsv 100 ...

  7. python 网络编程(网络基础之网络协议篇)

    前言 C/S  B/S 架构 client<----->server browser<--->server 学习socket编程就是要编写一个客户端软件和服务端软件,然后实现服 ...

  8. jQuery 刷新页面

    window.location.reload();

  9. 4.2 手写Java PriorityQueue 核心源码 - 实现篇

    上一节介绍了PriorityQueue的原理,先来简单的回顾一下 PriorityQueue 的原理 以最大堆为例来介绍 PriorityQueue是用一棵完全二叉树实现的. 不但是棵完全二叉树,而且 ...

  10. JavaScript代码风格和分号使用问题

    1.推荐代码风格 JavaScript Standard Style  规定相对松散更多人使用此规范 Airbnb JavaScript Style  规定更严格但也没毛病 2.JavaScript代 ...