事件处理设计到了三个对象:
  • EventSource(事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口,菜单等。
  • Event (事件封装了GUI组件上发生的特定事情(通常就是一次用户操作)。如果程序需要获得GUI组件上所发生事件的相关信息,都通过Event象来取得。
  • EventListener(事件监昕器):负责监听事件源所发生的事件,并对各种事件做出响应处理

3,事件的分类:

事件分为两大类,分别为低级事件和高级事件:

1,低级事件:

低级事件是指基于特定动作的事件,比如进入、点击、拖放等动作的鼠标事件,组件得到焦点、失去焦点时触发焦点事件
  • ComponentEvent: 组件事件,当组件尺寸发生变化、位置发生移动、显示 隐藏状态发生改变的时候触发该事件。
  • ContainerEvent: 容器事件,当容器里发生添加组件、删除组件时触发该事件。
  • WindowEvent: 窗口事件,当窗口状态发生改变(如打开、关闭、最大化、最小化)时触发该事件
  • FocusEvent: 焦点事件,当组件得到焦点或失去焦点时触发该事件
  • KeyEvent: 键盘事件,当按键被按下、松开、单击时触发该事
  • MouseEvent: 鼠标事件,当进行单击、按下、松开、移动鼠标等动作时触发该事件
  • PaintEvent: 组件绘制事件,该事件是个特殊的事件类型,GUI组件调update/paint方法来呈现自身时触发该事件,该事件并非专用于事件处理模型
 

2,高级事件:

高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发该事件的类,比如,在TextField中按Enter会触发ActionEvent件,在滑动条上移动滑块会触发AdjustmentEvent事件,选中列表的某一项会触发ItemEvent事件。
  • ActionEvent:动作事件,当按钮、菜单项被单击,在TextField中按 Enter 键时触发该事件。
  • AdjustmentEvent: 调节事件,在滑动条上移动滑块以调节数值时触发该事件。
  • ItemEvent: 选项事件,当用户选中某项或取消选中某项时触发该事件
  • TextEvent: 文本事件,当文本框、文本域里的文本发生改变时触发该事件。

3,AWT事件继承关系图(粗线圈出来的是常用的):

4,事件类型和监听器表:

5、窗口事件:

通过添加窗口事件来关闭窗口:WindowListener 监听器 windowClosing 方法

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener; /**
* @ClassName WindowCloseTest
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/5/6.
*/
public class WindowCloseTest {
public static void main(String[] args) {
Frame frame = new Frame("窗口监听器测试");
frame.setBounds(400,300,300,300);
WindowListener windowListener = new WindowListener() {
@Override
public void windowOpened(WindowEvent windowEvent) {
System.out.println("窗口被打开");
} @Override
public void windowClosing(WindowEvent windowEvent) {
System.out.println("窗口关闭中");
System.exit(0);
} @Override
public void windowClosed(WindowEvent windowEvent) {
System.out.println("窗口已关闭");
} @Override
public void windowIconified(WindowEvent windowEvent) {
System.out.println("窗口最小化了");
} @Override
public void windowDeiconified(WindowEvent windowEvent) {
System.out.println("窗口已恢复");
} @Override
public void windowActivated(WindowEvent windowEvent) {
System.out.println("窗口获得焦点");
} @Override
public void windowDeactivated(WindowEvent windowEvent) {
System.out.println("窗口失去焦点");
}
};
frame.addWindowListener(windowListener);
frame.setVisible(true);
}
}

6、事件适配器:

向上面的代码,我们其实只需要用到windowClosing,但是现实是所有的方法都需要重写一遍,很麻烦。事件适配器是监听器接口的空实现,事件适配器实现了事件监听器所有接口,并为该接口里的每个方法都提供了实现,这种实现是一种空实现(方法体内没有任何代码的实现)。当需要创建监听器时,可以通过继承事件适配器,而不是监听器接口。因为事件适配器已经为监听器接口的每个方法提供了空实现,所以程序自己的监听器无须实现监听器接口里的每个方法,只需要重写自己感兴趣的方法,从而可以简化事件监听器的实现类代码。
事件适配器很简单,就是把监听器的Listener修改为Adapter:
比如上面代码修改之后是:


import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener; public class WindowCloseTest {
public static void main(String[] args) {
Frame frame = new Frame("测试关闭窗口");
WindowListener windowListener = new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("正在关闭窗口");
System.exit(0);
}
};
frame.addWindowListener(windowListener);
frame.setBounds(100, 100, 400, 400);
frame.setVisible(true);
}
}
 
事件适配器的常用的几种写法:
(1),用内部类的方式实现
(2),外部类实现
(3),当前类本身实现
(4),匿名内部类实现

java 图形化小工具Abstract Window Toolit 事件处理的更多相关文章

  1. java 图形化小工具Abstract Window Toolit

      老掉牙的历史 Java1.0在发布的时候,就为我们提供了GUI操作的库,这个库系统在所有的平台下都可以运行,这套基本的类库被称作抽象窗口工具集(Abstract Window Toolit),简称 ...

  2. java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏

    画笔Graphics Java中提供了Graphics类,他是一个抽象的画笔,可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图. Graphics常用的画图方法如下: drawLine(): ...

  3. java 图形化小工具Abstract Window Toolit 常用组件:对话框Dialog FileDialog

    对话框 Dialog是Window类的子类,是1个容器类,属于特殊组件,对话框是可以独立存在的顶级窗口,因此用法与普通窗口的用法几乎完全一样.但对话框有如下两点需要注意. (1),对话框通常依赖于其他 ...

  4. java 图形化小工具Abstract Window Toolit ImageIO缩放图片,添加水印

    实现步骤: 读取图像Image src = ImageIO.read 创建目标图像BufferedImage distImage = new BufferedImage(dstWidth, dstHe ...

  5. java 图形化小工具Abstract Window Toolit 画笔 处理位图

    具体编程来处理位图 知识点: 实现逻辑: 画板上的图片 new BufferedImage(canvasWidth,canvasHeight,BufferedImage.TYPE_INT_BGR); ...

  6. java 图形化小工具Abstract Window Toolit 菜单项

    AWT 中的菜单由如下几个类组合而成 MenuBar: 菜单条,菜单的容器. Menu: 菜单组件,菜单项的容器,它也是Menultem的子类,所以可作为菜单项使用. PopupMenu: 上下文菜单 ...

  7. java 图形化小工具Abstract Window Toolit 常用组件

    基本组件 Button: 按钮,可接受单击操作 Canvas: 用于绘图的画布 Checkbox: 复选框组(也可变成单选框组件) CheckboxGroup: 用于将多个checkbox组件组合成一 ...

  8. java 图形化小工具Abstract Window Toolit ;布局管理器FlowLayout流式布局;BorderLayout边界布局;GridLayout网格布局;CardLayou重叠卡片布局;BoxLayout方框布局;绝对定位

    1.FlowLayout流式布局管理器: FlowLayout布局管理器中,组件像水流一样向某方向流动(排列),遇到障碍(边界)就折回,重头开始排列 .在默认情况下,FlowLayout局管理器从左向 ...

  9. 转:二十七、Java图形化界面设计——容器(JFrame)

    转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...

随机推荐

  1. 部署vue项目到Linux服务器

    案例一 vue-cli构建vue3项目,将项目上传到Linux服务器,服务器安装node,并启动vue项目 首先本地有一个vue项目,启动后可正常访问 本地打包后,也可直接访问 若打包后的index. ...

  2. 7.4 k8s结合ceph rbd、cephfs实现数据的持久化和共享

    1.在ceph集群中创建rbd存储池.镜像及普通用户 1.1.存储池接镜像配置 创建存储池 root@u20-deploy:~# ceph osd pool create rbd-test-pool1 ...

  3. DotNetty实现WebSocket的简单使用

    工作中项目是物联网项目的,管理平台又是bs架构. 如果用 Socket 的话,Web 端还需要转发,就全部统一采用了 WebSocket . DotNet 平台上的 WebSocket 实现有很多种, ...

  4. Codeforces 505E - Mr. Kitayuta vs. Bamboos(二分+堆)

    题面传送门 首先很显然的一点是,看到类似于"最大值最小"的字眼就考虑二分答案 \(x\)(这点我倒是想到了) 然鹅之后就不会做了/wq/wq/wq 注意到此题正着处理不太方便,故考 ...

  5. Spring-boot -Web开发

    1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自己编写业务代码: 文件名的功能 x ...

  6. R语言与医学统计图形-【11】ggplot2几何对象之散点图

    ggplot2绘图系统--几何对象之散点图 以geom开头的函数超过30个.几何对象和标度函数scale密不可分.只有在aes中传入某个变量,scale才能发挥作用. 所谓标度scale,就是图形遥控 ...

  7. Mysql-多个left join 计算逻辑

    单个left join: (1)一对一:结果表的行数=左表行数 (2)一对多:结果表的行数>左表行数 多个left join: (0)多个left join由上到下,依次生成查询表,原理同单个l ...

  8. SQL- case when then else end 用法经验总结

    对case when 的理解总结: 1.then和else后,只能写一条输出语句且输出结果就是新生成列的值;when 后的条件判断可以有多条,且可以多个字段联合判断:end 后的输出也可以有多条,但必 ...

  9. Spark3学习【基于Java】3. Spark-Sql常用API

    学习一门开源技术一般有两种入门方法,一种是去看官网文档,比如Getting Started - Spark 3.2.0 Documentation (apache.org),另一种是去看官网的例子,也 ...

  10. JVM1 JVM与Java体系结构

    目录 JVM与Java体系结构 虚拟机与Java虚拟机 虚拟机 Java虚拟机 JVM的位置 JVM的整体结构 Java代码执行流程 JVM的架构模型 基于栈的指令级架构 基于寄存器的指令级架构 两种 ...