深入解析Java事件监听机制与应用
Java事件监听机制详解
一、事件监听模型组成
-
事件源(Event Source)
产生事件的对象(如按钮、文本框等组件) -
事件对象(Event Object)
封装事件信息的对象(如ActionEvent
包含事件源信息) -
事件监听器(Event Listener)
定义事件处理方法的接口(如ActionListener
)
二、事件处理流程
- 用户操作触发事件源
- 事件源创建对应事件对象
- 事件对象传递给注册的监听器
- 监听器调用对应方法处理事件
三、常用事件类型
事件类型 | 监听接口 | 典型应用场景 |
---|---|---|
ActionEvent | ActionListener | 按钮点击/菜单选择 |
MouseEvent | MouseListener | 鼠标点击/移动 |
KeyEvent | KeyListener | 键盘输入 |
WindowEvent | WindowListener | 窗口操作 |
四、事件监听实现方式
// 示例1:按钮点击事件处理
import javax.swing.*;
import java.awt.event.*;public class EventDemo extends JFrame {public EventDemo() {JButton btn = new JButton("点击测试");btn.setBounds(50,100,95,30);// 方式1:匿名内部类btn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("按钮被点击");}});// 方式2:Lambda表达式(Java8+)btn.addActionListener(e -> System.out.println("Lambda方式处理点击"));add(btn);setSize(300,300);setLayout(null);setVisible(true);}
}
五、鼠标事件处理
// 示例2:鼠标事件监听
JPanel panel = new JPanel();
panel.addMouseListener(new MouseAdapter() { // 使用适配器类@Overridepublic void mouseClicked(MouseEvent e) {System.out.printf("点击坐标:(%d,%d)\n", e.getX(), e.getY());}@Overridepublic void mouseEntered(MouseEvent e) {panel.setBackground(Color.BLUE);}
});
六、键盘事件处理
// 示例3:键盘输入监听
JTextField textField = new JTextField(20);
textField.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode() == KeyEvent.VK_ENTER) {System.out.println("输入内容:" + textField.getText());}}
});
七、最佳实践建议
- 优先使用适配器类(如
MouseAdapter
)避免实现全部接口方法 - 复杂事件处理建议使用独立监听器类
- 多组件共享监听器时使用事件源判断
btn1.addActionListener(e -> {if(e.getSource() == btn1) {// 处理按钮1事件}
});
- Swing线程安全:事件处理代码在事件分发线程(EDT)执行,GUI更新必须在该线程进行
八、完整示例结构
public class FullDemo {public static void main(String[] args) {SwingUtilities.invokeLater(() -> {JFrame frame = new JFrame("事件演示");JButton btn = new JButton("提交");btn.addActionListener(e -> JOptionPane.showMessageDialog(frame, "操作成功"));frame.add(btn);frame.setSize(400, 300);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});}
}
相关文章:
深入解析Java事件监听机制与应用
Java事件监听机制详解 一、事件监听模型组成 事件源(Event Source) 产生事件的对象(如按钮、文本框等组件) 事件对象(Event Object) 封装事件信息的对象(如ActionEvent包含事件源信息…...
QT聊天项目DAY11
1. 验证码服务 1.1 用npm安装redis npm install redis 1.2 修改config.json配置文件 1.3 新建redis.js const config_module require(./config) const Redis require("ioredis");// 创建Redis客户端实例 const RedisCli new Redis({host: config_module.redis_…...
Python训练营---Day29
知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等&…...
Flask-SQLAlchemy_数据库配置
1、基本概念(SQLAlchemy与Flask-SQLAlchemy) SQLAlchemy 是 Python 生态中最具影响力的 ORM(对象关系映射)库,其设计理念强调 “框架无关性”,支持在各类 Python 项目中独立使用,包括 Flask、D…...
世界银行数字经济指标(1990-2022年)-社科数据
世界银行数字经济指标(1990-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90623839 https://download.csdn.net/download/paofuluolijiang/90623839 此数据集涵盖了1990年至2022年间全球各国的数字经济核心指标,数据…...
Redis进阶知识
Redis 1.事务2. 主从复制2.1 如何启动多个Redis服务器2.2 监控主从节点的状态2.3 断开主从复制关系2.4 额外注意2.5拓扑结构2.6 复制过程2.6.1 数据同步 3.哨兵选举原理注意事项 4.集群4.1 数据分片算法4.2 故障检测 5. 缓存5.1 缓存问题 6. 分布式锁 1.事务 Redis的事务只能保…...
NY337NY340美光固态颗粒NC010NC012
NY337NY340美光固态颗粒NC010NC012 在存储技术的浩瀚星空中,美光的NY337、NY340、NC010、NC012等固态颗粒宛如璀璨星辰,闪耀着独特的光芒。它们承载着先进技术与无限潜力,正深刻影响着存储行业的格局与发展。 一、技术架构与核心优势 美光…...
DAY26 函数定义与参数
浙大疏锦行-CSDN博客 知识点回顾: 1.函数的定义 2.变量作用域:局部变量和全局变量 3.函数的参数类型:位置参数、默认参数、不定参数 4.传递参数的手段:关键词参数 5.传递参数的顺序:同时出现三种参数类型时 函数的定义…...
系统安全及应用
目录 一、账号安全控制 1.基本安全措施 (1)系统账号清理 (2)密码安全控制 (3)历史命令,自动注销 2.用户提权和切换命令 2.1 su命令用法 2.2 sudo命令提权 2.3通过是sudo执行特权命令 二、系统引导和登录控制…...
微信小程序 地图 使用 射线法 判断目标点是否在多边形内部(可用于判断当前位置是否在某个区域内部)
目录 射线法原理简要逻辑代码 小程序代码调试基础库小程序配置地图数据地图多边形点与多边形关系 射线法 原理 使用射线法来判断,目标点是否在多边形内部 这里简单说下,具体细节可以看这篇文章 平面几何:判断点是否在多边形内(…...
第三十七节:视频处理-视频读取与处理
引言:解码视觉世界的动态密码 在数字化浪潮席卷全球的今天,视频已成为信息传递的主要载体。从短视频平台的爆火到自动驾驶的视觉感知,视频处理技术正在重塑人类与数字世界的交互方式。本指南将深入探讨视频处理的核心技术,通过Python与OpenCV的实战演示,为您揭开动态影像…...
什么是 Flink Pattern
在 Apache Flink 中,Pattern 是 Flink CEP(Complex Event Processing)模块 的核心概念之一。它用于定义你希望从数据流中检测出的 事件序列模式(Event Sequence Pattern)。 🎯 一、什么是 Flink Pattern&am…...
ADB基本操作和命令
1.ADB的含义 adb 命令是 Android 官方提供,调试 Android 系统的工具。 adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#x…...
NSString的三种实现方式
oc里的NSString有三种实现方式,为_ _NSCFConstantString、__NSCFString、NSTaggedPointerString 1._ _NSCFConstantString(字面量字符串) 从字面意思上可以看出,_ _NSCFContantString可以理解为常量字符串,这种类型的字符串在编译期就确定了…...
2025年PMP 学习二十 第13章 项目相关方管理
第13章 项目相关方管理 序号过程过程组过程组1识别相关方启动2规划相关方管理规划3管理相关方参与与执行4监控相关方参与与监控 相关方管理,针对于团队之外的相关方的,核心目标是让对方为了支持项目,以达到项目目标。 文章目录 第13章 项目相…...
学习黑客Kerberos深入浅出:安全王国的门票系统
Kerberos深入浅出:安全王国的门票系统 🎫 作者: 海尔辛 | 发布时间: 2025-05-18 🔑 理解Kerberos:为什么它如此重要? Kerberos是现代网络环境中最广泛使用的身份验证协议之一,尤其在Windows Active Dire…...
蓝桥杯19681 01背包
问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi,价值为 wi。每件物品只能使用一次。 请问可以通过什么样的方式选择物品,使得物品总体积不超过 M 的情况下总价值最大,输出这个最大价值即可。 输入格式 第一行输…...
使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h
12. 1852.每个子数组的数字种类数 1852. 每个子数组的数字种类数 - 力扣(LeetCode) 思想 找到nums 所有 长度为 k 的子数组中 不同 元素的数量。 返回一个数组 ans,其中 ans[i] 是对于每个索引 0 < i < n - k,nums[i..(i …...
Protect Your Digital Privacy: Obfuscate, Don’t Hide
Protect Your Digital Privacy: Obfuscate, Don’t Hide In today’s digital world, hiding completely online is nearly impossible. But you can protect yourself by deliberately obfuscating your personal information — making it harder for others to track, pro…...
Spark 的运行模式(--master) 和 部署方式(--deploy-mode)
Spark 的 运行模式(--master) 和 部署方式(--deploy-mode),两者的核心区别在于 资源调度范围 和 Driver 进程的位置。 一、核心概念对比 维度--master(运行模式)--deploy-mode(部署…...
从零开始实现大语言模型(十五):并行计算与分布式机器学习
1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程,以减少训练时间的方法。在工业界的训练大语言模型实践中,通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…...
生产模式下react项目报错minified react error #130的问题
这天,线上突然出现了一个bug,某个页面打开空白,看控制台报错minified react error #130,在本地看却是正常的,百思不得其解。 后来发现是由于线上项目它的包更新过了,而我本地的包没有更新,所以我…...
本地无损放大软件-realesrgan-gui
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/84516041df174 【本章下载二】:https://pan.xunlei.com/s/VOQDybD4ruF0-m8UJrCF-HtLA1?pwdxz9e# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
Java面试深度解析:微服务与云原生技术应用场景详解
Java面试深度解析:微服务与云原生技术应用场景详解 面试场景 面试官:我们今天的面试会围绕微服务与云原生技术展开,结合一个在线教育平台的业务场景进行提问。希望你放松心态,正常发挥。 码农明哥:好的好的…...
短剧小程序系统开发源码上架,短剧项目市场分析
引言 随着短视频内容消费的爆发式增长,短剧小程序凭借其碎片化、强互动、低成本的特点,成为内容创业与资本布局的新风口。2024年以来,行业规模突破500亿元,预计2027年将超千亿17。本文将深度解析短剧小程序系统开发的技术优势、市…...
常见的请求头(Request Header)参数
1. Accept 作用:告知服务器客户端支持的响应数据格式(如 JSON、XML、HTML)。示例:Accept: application/json(优先接收 JSON 格式数据)。 2. Content-Type 作用:说明请求体的数据格式(…...
渗透测试核心技术:内网渗透与横向移动
内网渗透是红队行动的关键阶段,攻击者通过突破边界进入内网后,需快速定位域控、横向移动并维持权限。本节从内网环境搭建、信息收集、横向移动技巧到权限维持工具,系统讲解如何在内网中隐蔽行动并扩大战果。 1. 内网环境搭建与基础配置 目标: 模拟真实企业网络,构建包含…...
2025/5/18
继续研究一下大佬的RAG项目。开始我的碎碎念。 RAG可以分成两部分:一个是问答,一个是数据处理。 问答是人提问,然后查数据库,把查的东西用大模型组织成人话,回答人的提问。 数据处理是把当下知识库里的东西…...
使用国内源加速Qt在线安装
简介: 在线安装Qt时,会发现下载非常缓慢,可以用过使用国内镜像源来加速安装过程。 在线安装包的下载过程: 1,打开下载页面 https://www.qt.io/download-open-source 2,点击 Download the Qt online ins…...
【图像生成大模型】HunyuanVideo:大规模视频生成模型的系统性框架
HunyuanVideo:大规模视频生成模型的系统性框架 引言HunyuanVideo 项目概述核心技术1. 统一的图像和视频生成架构2. 多模态大语言模型(MLLM)文本编码器3. 3D VAE4. 提示重写(Prompt Rewrite) 项目运行方式与执行步骤1. …...
Java IO流(超详细!!!)
Java IO流 文章目录 Java IO流1.文件相关基础普及1.1 常用文件操作1.3 目录的操作和文件删除 2.IO流原理及流的分类2.1 字节流2.1.1 InputStream:字节输入流2.1.2 OutputStream 2.2 字符流2.2.1 Reader2.2.1 Writer 2.3 节点流和处理流2.3.1节点流2.3.2 处理流2.3.2…...
规则联动引擎GoRules初探
背景说明 嵌入式设备随着物联网在生活和生产中不断渗透而渐渐多起来,数据的采集、处理、分析在设备侧的自定义配置越来越重要。一个可通过图形化配置的数据处理过程,对于加速嵌入式设备的功能开发愈发重要。作为一个嵌入式软件从业者,笔者一…...
Android开发-翻页类视图
在Android应用中,翻页类视图(Paging Views) 是一种非常直观且用户友好的方式来展示内容。无论是用于展示图片轮播、引导页还是分页加载数据列表,翻页效果都能极大地提升用户体验。本文将介绍几种实现翻页效果的常见组件和方法&…...
高能数造闪耀 CIBF 2025,以创新技术引领新能源智造新征程
在全球新能源产业加速发展的关键节点,CIBF 2025 展会成为行业技术与成果交流的重要平台。高能数造(西安)技术有限公司深度参与此次盛会,凭借在新能源电池智能制造领域的深厚积累与创新突破,为行业发展注入强劲动力&…...
数据结构与算法——栈和队列
栈和队列 栈概念与结构栈的实现栈的初始化栈的销毁判断栈是否为空入栈出栈取栈顶元素栈中有效元素个数 队列概念与结构队列的实现队列结点结构队列结构初始化队列队列判空销毁队列入队列,队尾出队列,队头取队头数据取队尾数据队列有效数据个数 栈 概念与…...
新电脑软件配置三 pycharm
快捷键放大和缩小字体 按住ctrl鼠标滚轮向上 缩小同理...
浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
JavaScript(ECMAScript)的发展经历了多个版本,每个版本都引入了新特性和改进。以下仅是对三个常用版本(ES5、ES6(ES2015) 和 ES2023)的基本对比及使用建议: 目前常见项目中还是用ES6…...
【Odoo】Pycharm导入运行Odoo15
【Odoo】Pycharm导入运行Odoo15 前置准备1. Odoo-15项目下载解压2. PsrtgreSQL数据库 项目导入运行1. 项目导入2. 设置项目内虚拟环境3. 下载项目中依赖4. 修改配置文件odoo.conf 运行Pycharm快捷运行 前置准备 1. Odoo-15项目下载解压 将下载好的项目解压到开发目录下 2. …...
【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案
WPF手机号码归属地批量查询与分类导出方案 应用场景 市场营销:企业根据手机号码归属地进行精准营销,按城市或省份分类制定针对性推广策略客户管理:快速对客户手机号码进行归属地分类,便于后续客户关系管理数…...
中级统计师-统计学基础知识-第四章 假设检验
一、假设检验的基本原理 1. 基本思想 反证法:假设原假设成立,通过样本矛盾性进行反驳小概率原理:设定显著性水平 α \alpha α(通常取 0.05),若观测结果的概率 p ≤ α p \leq \alpha p≤α,…...
等于和绝对等于的区别
1. (等于) 特点:比较时会自动进行类型转换(隐式转换),尝试将两边的值转为相同类型后再比较。规则: 如果类型相同,直接比较值。如果类型不同,按以下规则转换: …...
家庭关系处理个人总结
首先要说到前面的是,每个家庭的成员背景环境经济状况不同,原生家庭差异,导致面临具体问题是不同的。就类似软件“没有银弹”的概念,没有一种方法可以解决每个人问题。 举个例子,面对婆媳矛盾 网上父辈的人 会说 百行孝…...
【Python训练营打卡】day29 @浙大疏锦行
DAY 29 复习日 知识点回顾 1. 类的装饰器 2. 装饰器思想的进一步理解:外部修改、动态 3. 类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,…...
React 19版本refs也支持清理函数了。
文章目录 前言一、refs 支持清理函数二、案例演示1.useEffect写法2.React 19改进 的ref写法 总结 前言 React 19版本发布了ref支持清理函数了,这样就可以达到useEffect一样的效果了。为啥需要清理函数呢,这是因为节约内存。 清理事件监听(避…...
uniapp的适配方式
文章目录 前言✅ 一、核心适配方式对比📏 二、rpx 单位:uni-app 的核心适配机制🧱 三、默认设计稿适配(750宽)🔁 四、字体 & 屏幕密度适配🛠 五、特殊平台适配(底部安全区、刘海…...
Java面试场景:从音视频到AI应用的技术探讨
面试场景:音视频与AI应用技术的碰撞 在某互联网大厂的面试中,面试官王先生与求职者明哥展开了一场关于音视频技术与AI应用的对话。 第一轮提问:音视频场景 面试官:明哥,你能谈谈在音视频场景中,Spring B…...
es聚合-词条统计
es语句 ---普通结构----"tags":{"type": "keyword","index": true},GET /knowledge_test/_search {"size": 0,"aggs": {"tag_count": {"terms": {"field": "tags",&quo…...
【沉浸式求职学习day43】【Java面试题精选3】
沉浸式求职学习 1.Java中this和super的区别2.为什么返回类型不算方法重载3.方法重写时需要注意什么问题4.深克隆和浅克隆有什么区别5.如何实现深克隆6.什么是动态代理7.静态代理和动态代理的区别8.如何实现动态代理?9.JDK Proxy 和 CGLib 有什么区别?10.…...
OpenAI推出Codex — ChatGPT内置的软件工程Agents
OpenAI继续让ChatGPT对开发者更加实用。 几天前,他们增加了连接GitHub仓库的支持,可以"Deep Research"并根据你自己的代码提问。 今天,该公司在ChatGPT中推出了Codex的研究预览版,这是迄今为止最强大的AI编码Agent。 它可以编写代码、修复错误、运行测试,并在…...