Java键盘事件处理及监听机制解析

文章目录
- 概念
- KeyEvent
- KeyListener
- 代码演示
- 总结
概念
Java事件处理采用了委派事件模型。在这个模型中,当事件发生时,产生事件的对象将事件信息传递给事件的监听者进行处理。在Java中,事件源是产生事件的对象,比如窗口、按钮等;事件是承载事件源状态改变时的对象,比如键盘事件、鼠标事件、窗口事件等等。当事件发生时,会产生一个事件对象,该对象保存着当前事件的许多信息。

- 事件源:一个产生事件的对象,比如窗口、按钮等
- 事件:是承载事件源状态改变时的对象,比如键盘事件、鼠标事件、窗口事件等等,会产生一个事件对象,该对象保存着当前事件很多信息
Java.awt.event包和javax.swing.event包中定义了各种事件类型
- Java.awt.event包下

- javax.swing.event包下

当产生键盘事件的时候,会被KeyListener监听到,之后会产生KeyEvent对象,之后用KeyEvent做处理。事件监听器接口有多种,不同的事件监听器可以监听不同的事件,一个类可以实现多个监听接口。(KeyListener就是事件监听器之一)
KeyEvent
在Java事件模型中,KeyEvent类用于报告键和按钮事件的对象。它是由一个组件对象(如文本字段)产生的,用于描述键盘事件的发生,包括按键、释放和键入。每个KeyEvent对象都保存着与其关联的键的信息,包括按键的字符和键代码。
具体字段和构造器可查看JDK文档或百度
该类的方法如下:

每个KeyEvent都有一个相关的按键字符和按键代码,分别由getkeyChar()方法和getkeyCode方法进行返回
以下是KeyEvent类的一些常用方法
- getKeyCode():返回与此事件中的键关联的整数
- getKeyChar():返回与此事件中的键关联的字符
KeyListener
在Java中,我们可以使用KeyListener接口来监听键盘事件,它是一个事件监听器接口。通过实现该接口,可以监听键盘上的按键操作,并在按键事件发生时进行相应的处理。
KeyListener接口定义了三个方法,用于处理不同类型的键盘事件:
keyTyped(KeyEvent e):当一个键被键入时触发该方法。此方法用于监听键盘的字符输入。keyPressed(KeyEvent e):当一个键被按下时触发该方法。此方法用于监听键的按下操作。keyReleased(KeyEvent e):当一个键被释放时触发该方法。此方法用于监听键的释放操作。
可以根据需要选择实现接口的全部方法或只实现感兴趣的方法。通常情况下,我们使用KeyAdapter类来简化KeyListener接口的实现,因为KeyAdapter类提供了空实现的默认方法,可以根据需要重写感兴趣的方法即可。
下面是KeyListener接口的定义:
import java.util.EventListener;public interface KeyListener extends EventListener {void keyTyped(KeyEvent e);void keyPressed(KeyEvent e);void keyReleased(KeyEvent e);
}
通过实现KeyListener接口并重写上述方法,可以在相应的事件发生时执行自定义的操作。
代码演示
这里使用绘图方法演示事件监听机制
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;public class KeyboardListenerExample extends JFrame {private MyPanel myPanel;public static void main(String[] args) {KeyboardListenerExample example = new KeyboardListenerExample();}public KeyboardListenerExample() {myPanel = new MyPanel();this.add(myPanel);this.setSize(400, 300);this.addKeyListener(myPanel);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
}class MyPanel extends JPanel implements KeyListener {@Overridepublic void paint(Graphics g) {g.fillOval(10, 10, 20, 20);}@Overridepublic void keyTyped(KeyEvent e) {System.out.println(e.getKeyChar() + " character typed");}@Overridepublic void keyPressed(KeyEvent e) {System.out.println(e.getKeyChar() + " key pressed");}@Overridepublic void keyReleased(KeyEvent e) {System.out.println(e.getKeyChar() + " key released");}
}
在上述代码中,创建了一个继承自JFrame的KeyboardListenerExample类作为窗口容器,并添加了一个自定义面板MyPanel作为窗口的内容。MyPanel类实现了KeyListener接口,并重写了三个方法来处理键盘事件。在main方法中创建KeyboardListenerExample实例后,将MyPanel面板添加到窗口中,并将面板注册为键盘事件的监听器。当键盘事件发生时,相应的方法将被调用,并输出相应的信息。
运行以上示例代码后,可以通过按下键盘上的键来触发相应的事件,并在控制台上查看输出结果。
总结
Java事件处理是基于委派事件模型的,其中事件源产生事件,事件监听者接收并处理事件。在键盘事件处理中,可以使用KeyEvent类来描述键盘事件,使用KeyListener接口来监听键盘事件,并通过重写keyTyped、keyPressed和keyReleased等方法来处理相应的事件。
通过了解和使用Java事件处理和键盘事件相关的类和接口,可以实现对键盘操作的监听和响应,为程序添加更丰富的交互体验和功能。
相关文章:
Java键盘事件处理及监听机制解析
文章目录 概念KeyEventKeyListener代码演示总结 概念 Java事件处理采用了委派事件模型。在这个模型中,当事件发生时,产生事件的对象将事件信息传递给事件的监听者进行处理。在Java中,事件源是产生事件的对象,比如窗口、按钮等&am…...
Git详解——安装、使用、搭建、IDEA集成
Git 看目录,篇幅挺长,越往后面越重要 目录一、git是什么?二、为什么要使用Git?三、版本控制工具四、git下载安装以及环境配置五、git基本命令六、git项目搭建七、远程仓库怎么搞?git,gitlab,github,gitee区别八、ide…...
【JavaSE】Java基础语法(二十一):内部类
文章目录 1. 内部类的基本使用2. 成员内部类3. 局部内部类4. 匿名内部类5. 匿名内部类在开发中的使用(应用) 1. 内部类的基本使用 内部类概念 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类定…...
Ceph应用
//存储类型 块存储 一对一,只能被一个主机挂载使用,数据以块为单位进行存储,典型代表: 硬盘 文件存储 一对多,能被多个主机同时挂载使用,数据以文件的形式存储的(元数据和实际数据是分开存储的),并且有…...
Oxford online English-Chair a Meeting 05/29
Part1-Welcoming attendees and starting the meeting Getting people’s attention If I could have your attention, please. Could I have your attention, please? Good afternoon, everyone. -> Good afternoon, everyone, could I have your attention, please?…...
LeetCode: 二叉树的直径(java)
二叉树的直径 leetcode 543题。原题链接题目描述解题代码二叉树专题 leetcode 543题。原题链接 543题:二叉树的直径 题目描述 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也…...
springboot+vue+java旅行旅游景点酒店预订出行订票系统eaog5
线上旅行信息管理系统要求实现以下功能: a.景点管理,展示景点的基础信息,介绍等信息。 b.酒店管理,展示酒店的基础信息,介绍等信息。 c.评价管理,可以查看景点或酒店的相关评价信息,客户消费完,…...
Linux :: 【基础指令篇 :: 用户管理:(2)】::设置用户密码(及本地Xshell 登录云服务器操作演示) :: passwd
前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 目录索引&am…...
img[:, :, ::-1] 通俗理解
👨💻个人简介: 深度学习图像领域工作者 🎉工作总结链接:https://blog.csdn.net/qq_28949847/article/details/128552785 链接中主要是个人工作的总结,每个链接都是一些常用demo,…...
基于springboot+vue+elementui的健身房会员管理系统的
为了帮助用户更好的了解和理解程序的开发流程与相关内容,本文将通过六个章节进行内容阐述。 第一章:描述了程序的开发背景,程序运用于现实生活的目的与意义,以及程序文档的结构安排信息; 第二章:描述了程序…...
在酒店房间中的数据库索引
如果你经常去酒店,你会看到一块类似下面的标牌,指引你到达房间。这能够帮助你方便快速地找到房间,特别是当酒店拥有许多房间时。 以一个有9层的酒店为例。你的房间号是917。第一步是找到你的房间在哪一层,通常第一个数字表示楼层…...
Zookeeper学习---2、客户端API操作、客户端向服务端写数据流程
1、客户端API操作 1.1 IDEA 环境搭建 前提:保证 hadoop102、hadoop103、hadoop104 服务器上 Zookeeper 集群服务端启动。 1、创建一个工程:Zookeeper 2、添加pom文件 <?xml version"1.0" encoding"UTF-8"?> <project …...
Stack 栈的实现与应用
目录 1. 概念 2. 常用的栈的方法 2.1 方法 2.2 代码 3. 自己实现栈 3.1 构造MyStack 3.2 push() 3.3 ensureCapacity() 3.4 pop() 3.5 peek() 3.6 empty() 3.7 szie() 4. 栈的应用 1. 概念 栈(Stack)是一种数据结构&…...
CSDN中如何获得铁粉(用心篇)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
es 三 安装 es 安装kibana
目录 安装7.3.0 版本 下载地址 一个比一个快 页面测试访问 安装kibana 下载 Config/kibana.yml 配置修改开启中文 页面访问 安装7.3.0 版本 下载地址 一个比一个快 Index of /elasticsearch/ 下载中心 - Elastic 中文社区 下载中心 - Elastic 中文社区 官网下载 开箱…...
牛客HJ43迷宫问题 - 创建智能体通过策略自己找路
文章目录 问题描述思路代码C 问题描述 描述 定义一个二维数组 N*M ,如 5 5 数组下所示: int maze[5][5] { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁࿰…...
测试报告模板一
XX测试报告 文档作者: 编写日期: 项目经理: 批准日期: 文档修改纪录表 日期 制修人 修改内容描述 1. 测试项目描述 1.1 测试描述 项目名称...
抖音账号矩阵系统源码/技术开发搭建私有化部署开源
抖音SEO矩阵系统是基于抖音平台的搜索引擎优化技术的一种系统,其主要作用是通过一系列的技术手段,提高抖音视频的曝光和排名,使其获得更多的流量和粉丝。在本文中,我们将介绍抖音SEO矩阵系统的开发技术,包括系统设计、…...
OpenSSL加密解密文件
OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库、应用程序、SSL协议库。Openssl实现了SSL协议所需要的大多数算法。 下面介绍使用Openssl进行文件的对称加密操作。 一、Openssl支持的加密算法有: -aes-128-cbc…...
PAT A1070 Mooncake
1070 Mooncake 分数 25 作者 CHEN, Yue 单位 浙江大学 Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types of fillings and crusts can be found in traditional mooncakes according to the regions culture. Now gi…...
架构设计师 | 奠基之石:深入浅出,掌握系统工程五大方法论
一、引言1.1 系统工程核心定义系统工程是 20 世纪 40 年代伴随大型工程项目需求诞生的跨领域组织管理技术,是从整体视角对系统组成要素、组织结构、信息流、控制机制进行统筹分析的科学决策方法,核心目标是实现系统全生命周期的整体最优,而非…...
AI Agent与传统RPA的融合:自动化办公的新纪元
AI Agent与传统RPA的融合:自动化办公的新纪元 副标题:探索智能自动化的未来:从规则驱动到学习型系统的演进 摘要/引言 在当今快速发展的商业环境中,企业面临着提高效率、降低成本、提升竞争力的巨大压力。自动化技术作为应对这些挑战的关键手段,已经经历了多个发展阶段。…...
对比自建代理,使用Taotoken聚合平台在稳定性与运维上的体验提升
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比自建代理,使用Taotoken聚合平台在稳定性与运维上的体验提升 过去,一些开发团队为了便捷地使用特定的大…...
94、【Agent】【OpenCode】edit 工具提示词(参数内容)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】edit 工…...
【限时解锁】Gemini深度研究模式私有化部署方案:仅3家头部科研机构掌握的本地化推理链配置
更多请点击: https://codechina.net 第一章:Gemini深度研究模式的核心原理与能力边界 Gemini深度研究模式并非简单增强上下文长度的推理机制,而是一种面向复杂知识密集型任务的分层式认知架构。其核心原理在于动态构建“问题-证据-推理”三元…...
Python之ansimagic包语法、参数和实际应用案例
Python ansimagic包完整详解:功能、安装、语法、案例、排错 ansimagic 是Python轻量级终端动画/字符动画工具包,专注于在命令行(CMD、Terminal、PowerShell)中生成流畅的动态字符效果、进度条、加载动画、文字动画、ASCII动画等。…...
如何构建高效笔记系统:解锁OneNote智能编辑新体验
如何构建高效笔记系统:解锁OneNote智能编辑新体验 【免费下载链接】NoteWidget Markdown add-in for Microsoft Office OneNote 项目地址: https://gitcode.com/gh_mirrors/no/NoteWidget 在数字时代,高效的知识管理已成为专业人士的核心竞争力。…...
【ChatGPT移动端实战指南】:20年AI工程师亲测的5大隐藏技巧,90%用户从未用过
更多请点击: https://intelliparadigm.com 第一章:ChatGPT移动端使用体验 在 iOS 和 Android 平台上,官方 ChatGPT 应用已全面支持语音输入、多轮上下文保持与离线提示缓存,显著优化了通勤、会议间隙等碎片化场景下的交互效率。…...
解密AliceSoft游戏文件处理:3种高效提取与编辑方法深度解析
解密AliceSoft游戏文件处理:3种高效提取与编辑方法深度解析 【免费下载链接】alice-tools Tools for extracting/editing files from AliceSoft games. 项目地址: https://gitcode.com/gh_mirrors/al/alice-tools alice-tools是一款专为AliceSoft游戏设计的开…...
暗黑破坏神2现代重生:D2DX如何让经典游戏在4K宽屏时代焕发新生?
暗黑破坏神2现代重生:D2DX如何让经典游戏在4K宽屏时代焕发新生? 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2…...
