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…...
PDFMathTranslate:突破语言障碍的学术文档翻译终极解决方案
PDFMathTranslate:突破语言障碍的学术文档翻译终极解决方案 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务&…...
从分类影像到Fragstats输入:搞定景观格局分析前处理的完整避坑指南
景观格局分析前处理全流程:从分类影像到Fragstats输入的实战避坑指南 当你完成遥感影像分类,准备计算景观指数时,是否遇到过Fragstats报错"Invalid input format"?或是发现计算结果与预期不符却找不到原因?本…...
Windows下Power Shell快速激活venv虚拟环境的正确姿势(避坑指南)
Windows下Power Shell快速激活venv虚拟环境的正确姿势(避坑指南) 在Windows平台上使用Python进行开发时,虚拟环境(venv)是隔离项目依赖的必备工具。然而,许多从Linux/macOS转向Windows的开发者,…...
热点 | Harness 架构深度解析:AI智能体编排框架的核心原理
热点 | Harness 架构深度解析:AI智能体编排框架的核心原理 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 本文深度解析 Claude Code 背后的核心架构 Harness,揭示为何"Harness 比模型更重要"成为 2026 年 AI …...
如何快速上手tuic:从零开始的安装与配置教程
如何快速上手tuic:从零开始的安装与配置教程 【免费下载链接】tuic 项目地址: https://gitcode.com/gh_mirrors/tu/tuic tuic是一款高效的GitHub加速工具,能够帮助用户解决GitHub访问速度慢、连接不稳定等问题,让开发者更流畅地获取G…...
如何高效管理LiteDB数据库?LiteDB.Studio实战指南与深度解析
如何高效管理LiteDB数据库?LiteDB.Studio实战指南与深度解析 【免费下载链接】LiteDB.Studio A GUI tool for viewing and editing documents for LiteDB v5 项目地址: https://gitcode.com/gh_mirrors/li/LiteDB.Studio 在现代软件开发中,嵌入式…...
告别Keil5刺眼白屏!保姆级教程教你配置VS Code同款暗黑主题(附3套配色方案)
Keil5暗黑主题终极改造指南:从护眼原理到深度定制 凌晨三点的实验室里,显示屏刺眼的白光让我的眼球开始灼烧般疼痛——这是许多嵌入式开发者共同的噩梦。Keil5作为单片机开发的主流工具,其默认的亮色主题在长时间编码时带来的视觉负担远超你的…...
解决tiktoken离线使用难题:手动下载cl100k_base.tiktoken并配置本地缓存的保姆级教程
突破网络限制:tiktoken离线部署全流程实战指南 在自然语言处理领域,token切分是模型处理文本的第一步关键操作。对于依赖GPT系列模型的开发者而言,tiktoken作为OpenAI官方推出的高效tokenizer,其重要性不言而喻。然而,…...
忍者像素绘卷参数详解:CFG/Steps/画幅三要素调优指南
忍者像素绘卷参数详解:CFG/Steps/画幅三要素调优指南 1. 认识忍者像素绘卷 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,它将忍者的热血意志与16-Bit复古游戏美学完美融合。这款工具采用明亮的"云端"视觉设计,…...
Python 批量导出数据库数据至 Excel 文件
简介 langchain专门用于构建LLM大语言模型,其中提供了大量的prompt模板,和组件,通过chain(链)的方式将流程连接起来,操作简单,开发便捷。 环境配置 安装langchain框架 pip install langchain langchain-community 其中…...
