现在使用的仍是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. Anaconda tensorflow 安装笔记

    1.安装步骤: (1)Anaconda下载Anaconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载.ps:也可 ...

  2. CopyOnWrite 策略

    CopyOnWrite 是用于解决并发读写的一种策略,在Write的时候对共享变量进行Copy,在副本上进行更新,再把更新好的副本原子性地替换原来的共享变量.写入时复制是一种优化策略,多个调用者同时访 ...

  3. C/C++获取操作系统、CPU、内存信息(windows和linux)

    有时候需要在工程里面获取一些系统或者硬件的信息,比如系统版本,cpu,内存,显卡,硬盘等,作为后续软件功能判断的依据,甚至参与性能算法自适应建模 Windows 操作系统和内存信息在windows下通 ...

  4. hibernate 学习 一 基本概念

    1: Hibernate对JDBC进行封装,以面向对象的方式对关系型数据库进行操作. 2:  Hibernate的配置文件: hibernate.properties  或者  hibernate.c ...

  5. HDOJ-1391

    Number Steps Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  6. 利用python数据分析panda学习笔记之基本功能

    1 重新生成索引 如果某个索引值不存在就引入缺失值 from pandas import Series,DataFrame import pandas as pd import numpy as np ...

  7. mysql:视图,触发器

    一视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL 语句获取动态的数据集,并未其命名],用户使用时只需使用名称即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以吧查询过程的临时表 ...

  8. 51nod 1051【基础】

    思路: 找题4级做做...然后找了题最水的.. = =感动...居然是一下子[记]得了做法... dp一下,枚举列的起点和终点,然后求和这一段,然后对这一大列就是求个最大字段和: #include & ...

  9. HDU5918【KMP大法好,虽然我不会】

    #include <bits/stdc++.h> using namespace std; typedef long long LL; const; int n,m; int a[MAX] ...

  10. hdu5883【欧拉通路】

    题意:n个点m条无向边的图,找一个欧拉通路/回路,下标是p1,p2,p3-pt,然后使得ap1XORap2XOR-XORapt这个值最大. 思路: 首先要判断一下这个图是不是联通的,用并查集就好了,然 ...