现在使用的仍是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. C语言system()函数:执行shell命令

    头文件:#include <stdlib.h> 定义函数:int system(const char * string); 函数说明:system()会调用fork()产生子进程, 由子进 ...

  2. 插入排序(InsertionSort)

    位置p上的元素存储于tmp(第一趟p通常取1),而(位置p之前)所有更大的元素都向右移动一个位置. 然后tmp被放在正确的位置上. 代码: public class InsertionSort { p ...

  3. codevs 3027线段覆盖2

    传送门 3027 线段覆盖 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标, ...

  4. SPOJ(后缀数组求不同子串个数)

    DISUBSTR - Distinct Substrings Given a string, we need to find the total number of its distinct subs ...

  5. Windows下安装zip包解压版mysql

    Windows下安装zip包解压版mysql 虽然官方提供了非常好的安装文件,但是有的时候不想每次再重装系统之后都要安装一遍MySQL,需要使用zip包版本的MySQL.在安装时需如下三步: 1. 新 ...

  6. js搜索相同类型的控件全选、取值(Checkbox)

    function selectAll(obj) { if (obj.checked) { $("input[type='checkbox']").each(function () ...

  7. myeclipse 重新关联项目和svn

    有时候重装了svn或重新定义了WorkSpaces,原项目和svn没关联了 那么 右击要提交的项目 在弹出的菜单依次:Team -->share project 在弹出的对话框里填入SVN的地址 ...

  8. c#类—成员函数和封装及构造函数、析构函数、静态成员

    C# 类(Class) 当您定义一个类时,您定义了一个数据类型的蓝图.这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作.对象是类的实 ...

  9. E20180715-hm

    grapefruit n. 葡萄柚,西柚; 葡萄柚树;

  10. vijosP1286座位安排(状压DP)

    传送门 题意 计算\(C_{n*m}^k/可行方案数\) 分析 定义dp[i][j][k]为第i行用过人数为j个且第i行状态为k的方案数 转移方程:dp[i][j][k]=Σdp[i-1][j-num ...