Java事件监听机制

这里写目录标题

    • 先进行专栏介绍
    • 再插一句
  • 开始喽
    • 事件监听机制
      • 分析
        • 观察者模式
          • 观察者模式由以下几个角色组成:
          • 观察者模式的工作流程如下:
          • 观察者模式的优点包括:
          • 观察者模式适用于以下场景:
          • 总结
      • 事件监听机制的工作流程如下:
      • Java代码示例

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记
进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。

在这里插入图片描述

再插一句

有一段时间断更了,是在更新数据结构与算法专栏,有兴趣的可以去看一看,比较不错

开始喽

事件监听机制

Java中的事件监听机制是一种用于处理用户交互事件的机制。它允许开发人员在特定事件发生时执行特定的代码逻辑。

在这里插入图片描述

分析

在Java中,事件监听机制是基于 观察者模式实现的。

在这里插入图片描述

观察者模式

在这里插入图片描述

观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生变化时,
所有依赖它的对象都会得到通知并自动更新。
观察者模式由以下几个角色组成:
1Subject(主题):主题是被观察的对象,它维护了一个观察者列表,并提供了用于添加、删除和通知观察者的方法。主题可以是一个接口或抽象类,具体的主题类实现了主题接口。
2、Observer(观察者):观察者是依赖于主题的对象,它定义了一个更新方法,当主题状态发生变化时,观察者会被通知并执行相应的更新操作。观察者可以是一个接口或抽象类,具体的观察者类实现了观察者接口。
3、ConcreteSubject(具体主题):具体主题是主题的具体实现类,它维护了一个状态,并在状态发生变化时通知观察者。具体主题类通常包含了观察者列表,并提供了添加、删除和通知观察者的方法。
4、ConcreteObserver(具体观察者):具体观察者是观察者的具体实现类,它实现了观察者接口中的更新方法。具体观察者类在收到通知后,根据具体的业务需求执行相应的更新操作。

在这里插入图片描述

观察者模式的工作流程如下:
1、主题对象维护观察者列表,并提供了添加、删除和通知观察者的方法。
2、观察者对象注册到主题对象上,成为主题对象的观察者。
3、当主题对象的状态发生变化时,它会遍历观察者列表,并调用每个观察者的更新方法。
4、每个观察者收到通知后,根据具体的业务需求执行相应的更新操作。

在这里插入图片描述

观察者模式的优点包括:
1、解耦:主题对象和观察者对象之间解耦,它们可以独立变化,互不影响。
2、可扩展性:可以动态地添加、删除观察者对象,使得系统具有良好的扩展性。
3、灵活性:观察者模式可以实现一对多的依赖关系,一个主题对象可以通知多个观察者对象。
观察者模式适用于以下场景:
当一个对象的改变需要同时改变其他对象的时候,可以使用观察者模式。
当一个抽象模型有两个方面,其中一个方面依赖于另一个方面时,可以使用观察者模式。
当一个对象必须通知其他对象,但又不希望与被通知的对象形成紧耦合关系时,可以使用观察者模式。
总结
观察者模式通过定义一对多的依赖关系,实现了对象之间的解耦和松耦合。它提供了一种灵活的方式来处理对象之间的通信和状态变化,使得系统具有更好的可扩展性和可维护性。

在这里插入图片描述

事件监听机制的工作流程如下:

定义事件源:事件源是触发事件的对象,它通常是一个类或接口。事件源需要提供注册和注销监听器的方法,并在适当的时候触发事件。
定义事件监听器接口:事件监听器接口定义了事件发生时要执行的方法。通常,事件监听器接口包含一个或多个事件处理方法。
实现事件监听器:根据定义的事件监听器接口,实现具体的事件监听器类。这些类负责处理事件发生时的逻辑操作。
注册事件监听器:在事件源上调用注册方法,将事件监听器对象注册到事件源上。这样,事件源就知道要通知哪些监听器。
触发事件:当事件源发生事件时,它会遍历已注册的监听器列表,并调用每个监听器的事件处理方法。这样,每个监听器都可以根据具体的业务需求执行相应的操作。
响应事件:每个监听器收到事件通知后,根据具体的业务需求执行相应的操作。这些操作可以包括更新界面、处理数据、发送通知等。

Java代码示例

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class crj {public static void main(String[] args) {JFrame jf=new JFrame();jf.setTitle("事件监听机制");jf.setSize(400,300);jf.setDefaultCloseOperation(3);jf.setLocationRelativeTo(null);jf.setAlwaysOnTop(true);jf.setLayout(null);//确定按钮JButton jButton=new JButton("你点我啊");jButton.setBounds(0,0,100,100);jf.add(jButton);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("你点我啊");}});jf.setVisible(true);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/53481.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python导出SqlServerl数据字典为excel

sql代码 SELECTtableName D.name ,tableIntroduce isnull(F.value, ),sort A.colorder,fieldName A.name,catogary B.name,bytes A.Length,lengths COLUMNPROPERTY(A.id, A.name, PRECISION),scales isnull(COLUMNPROPERTY(A.id, A.name, Scale), 0),isOrNotNull Cas…

Java 监听Mysql binlog

使用 mysql-binlog-connector-java 1. mysql-binlog-connector-java 官网 2. Java代码中,如何监控Mysql的binlog? 前置条件 1. mysql服务器表结构 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 C…

【测试联调】如何在前后端测试联调时优雅的构造异常场景

目录 背景 使用iptables实现 利用iptables丢弃某ip数据包 使用 -L 列出所有规则 IP 连通性 通信 测试 插入一条规则,丢弃此ip 的所有协议请求 列出所有规则 测试 丢弃规则内的IP 连通性 清除 规则列表的 限制 模拟ip进行丢包50%的处理。 mysql proxy 代理…

(亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

最近在进行一个Flask项目的过程中遇到了unresolved reference 包名的问题,在网上找了好久解决方案,并没有一个能让我一步到位解决问题的。 后来,我对该问题和网上的解决方案进行了分析,发现网上大多数都是针对项目同一目录下的py…

【数据库】将excel数据导入mysql数据库

环境:Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件,删除表头行并另存为并更改编码方式(由于与数据库的编码不同,会导致导入报错) 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载(Loading)1.2 验证(Verification)1.3 准备(Preparation)1.4 解析(Resolution)1.5 初始化(Initialization) 二、双亲委派…

LIME(可解释性分析方法)

目录 1.什么是LIME 2.思路 3.LIME在不同任务中的范式(待补充) 1.什么是LIME 简单理解: 对于分类任务:如下图所示,LIME可以列出分类结果,所依据特征对应给比重。 对于图像分类任务:如下图所示&a…

git 忽略掉不需要的文件

第一步:创建.gitignore文件 touch .gitignore 第二步:使用vi编辑器 输入不需要的文件,或用通配符*来忽视一系列文件 效果:

华为OD机试之报文回路(Java源码)

题目描述 IGMP 协议中响应报文和查询报文,是维系组播通路的两个重要报文,在一条已经建立的组播通路中两个相邻的 HOST 和 ROUTER,ROUTER 会给 HOST 发送查询报文,HOST 收到查询报文后给 ROUTER 回复一个响应报文,以维持…

每日一题——回文链表

回文链表 题目链接 回文结构即字符串正序逆序完全一致,如“1 2 3 4 3 2 1”,那么我们就要想办法同时比较链表头和链表尾的元素,看其是否相等。 下面介绍一种最常用的方法: 思路 如果我们仔细观察回文结构,就会得到一…

差值结构的相互作用能

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由6张二值化的图片组成,让A,B中各有3个点,且不重合,统计迭代次数并排序。 其中有10组数据 差值结构 A-B 迭代次数 构造平均列 平均列…

基于 Redux + TypeScript 实现强类型检查和对 Json 的数据清理

基于 Redux TypeScript 实现强类型检查和对 Json 的数据清理 突然像是打通了任督二脉一样就用了 generics 搞定了之前一直用 any 实现的类型…… 关于 Redux 的部分,这里不多赘述,基本的实现都在这里:Redux Toolkit 调用 API 的四种方式 和…