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

news2024/11/23 17:10:30

在这里插入图片描述

文章目录

  • 概念
  • 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接口定义了三个方法,用于处理不同类型的键盘事件:

  1. keyTyped(KeyEvent e):当一个键被键入时触发该方法。此方法用于监听键盘的字符输入。
  2. keyPressed(KeyEvent e):当一个键被按下时触发该方法。此方法用于监听键的按下操作。
  3. 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 {
    @Override
    public void paint(Graphics g) {
        g.fillOval(10, 10, 20, 20);
    }

    @Override
    public void keyTyped(KeyEvent e) {
        System.out.println(e.getKeyChar() + " character typed");
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e.getKeyChar() + " key pressed");
    }

    @Override
    public 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事件处理和键盘事件相关的类和接口,可以实现对键盘操作的监听和响应,为程序添加更丰富的交互体验和功能。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java企业级信息系统开发学习笔记11 利用MyBatis实现条件查询

文章目录 一、学习目标1.对学生表进行条件查询,涉及姓名、性别和年龄三个字段。2.比如查询姓“吴”,性别为“女”,同时年龄为19的学生记录 二、打开上一笔记mybatis项目三、对学生表实现条件查询(一)创建学生映射器配置…

如何使用wget下载(录制)流媒体或直播推流文件,以及下载出现“正在把输出重定向至 “wget-log.1””错误该怎么办

下载推流文件其实非常简单,就是通常使用的最简单的命令: wget URL -O 输出文件名这里最好设置一下输出文件名,不然很可能下载的文件名称会很奇怪,导致格式识别错误或者其他问题。 不过,如果你直接使用这个命令很可能…

微信小程序nodejs+vue图书馆自习室座位管理系统vax51

系统设计需要从用户和管理员的实际需求开始,以了解他们需要实施哪些功能以及他们可以包括哪些管理工作。 考虑到图书馆座位预约系统小程序系统设计的特点,应满足几个要求:开发语言 node.js 框架:Express 前端:Vue.js 数据库&#…

[MySQL从入门到精通]MySQL概述及安装

前言 你是否想过我们在登录各种各样的网站时候,所需要输入的账号密码,它们存储在哪里?你猜对了,就是今天我们所要说的数据库 目录 前言 1.数据库的概述 1.1 数据 1.2 数据库 1.3数据库的种类 1.4数据库管理系统 2.MySQL的…

CSS 水平垂直居中的方式

目录 在不知道子元素宽高的情况下,水平垂直居中的六种方式: 1、弹性盒子布局方式来实现(flex)。 2、绝对定位 transform 3、table标签 4、display:table-cell 5、display: grid 6、writing-mode 属性 在不知道子…

chatgpt赋能python:10年Python编程经验的工程师推荐:免费的PythonIDE

10年Python编程经验的工程师推荐:免费的Python IDE 作为一名有着10年Python编程经验的工程师,我一直在寻找可以帮助我提高效率的Python IDE。在这个过程中,我试用了许多付费和免费的IDE,最终发现了一些免费的Python IDE&#xff…

chatgpt赋能python:Python关闭程序语句:顺畅退出程序的方式

Python关闭程序语句:顺畅退出程序的方式 当我们创建一个Python程序时,我们需要确保该程序以正确的方式结束,而不是通过强制终止或强制关闭窗口这样的极端行为。 这种情况可能会导致数据丢失和资源泄漏,从而影响程序的稳定性和可靠…

chatgpt赋能python:Python在计量中的应用

Python在计量中的应用 Python是一种高级编程语言,已经成为了计量学中不可缺少的工具。 Python有一个强大的生态系统,包括庞大的第三方库,这些库提供了丰富的机器学习、数据可视化和分析工具,这些工具在计量学中发挥了极为重要的作…

【vue2+docx-preview】实现docx文档预览(自定义修改样式)

前言 使用vue预览docx的解决方案,过去还有一种Mammoth 。 它旨在转换 .docx 文档(例如由 Microsoft Word 创建的文档),并将其转换为 HTML。 不支持样式。实现方式可以参考:Vue Word预览之mammoth.js 因此选择换成支持…

【thingsboard+NodeRed+chirpstack】实现Lora节点设备的数据上下行通讯

本文主要实现基于 thingsboard+NodeRed+chirpstack 实现 lora设备的数据上下行通讯。 NodeRed作为mqtt桥接器,在开源的社区版 thingsboard上实现 这里写目录标题 LoRa 设备上下行通讯方案数据上行数据下行Device 层面创建设备时,要添加 relation规则链层面灯控模块规则链规则…

【libtorch】pytorch源码编译生成c++ 17 libtorch记录

文章目录 1. 问题描述2. 编译安装前准备3. 编译安装4. 编译好之后使用 1. 问题描述 ubuntu20.04 ros2 humble使用1.8.0 libtorch出现coredump,提示加载模型失败: 原因: ros2 humble项目使用c17编译,c11的libtorch的库文件版本不配…

基于springboot+Vue的汽车商城销售4s店服务系统

基于Vue构建一个汽车服务商城,邀请各大商家入住平台,主要包括邀请洗车店、邀请汽车配件商店、邀请4s店入住、邀请汽车美容店入住、邀请汽车修理店入住平台等。这个平台为了给商家和用户提供便利,用户可以更方便体验汽车服务,商家可…

SpringBoot源码分析:SpringBoot启动源码(一)

一、概述 SpringBoot启动的源码分为前期初始化,和后期启动两个部分,我们从这两个部分开始介绍。 二、前期初始化 SpringBoot前期初始化主要由下面三行代码组成。 进入SpringApplication.getSpringFactoriesInstances方法 最终进入SpringFactoriesLoade…

自学黑客(网络安全)入门小测试

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 最近突然出现好多自学黑客(网络安全)的文章,粉丝看到后…

chatgpt赋能python:Python关键词统计

Python关键词统计 Python是一种高级编程语言,为开发人员提供了许多功能和库。对于SEO来说,Python具有统计网站上的关键词和分析数据的重要功能。在本文中,我们将探讨Python关键词统计和如何在SEO中使用它。 什么是Python关键词统计 Python…

一图看懂 configparser 模块:配置文件解析器,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 configparser 模块:配置文件解析器,资料整理笔记(大全) 🧊摘要🧊模块图🧊类关系图&#…

vue的虚拟DOM

vue的虚拟DOM 什么是虚拟DOM 虚拟DOM提供了一个与平台无关的抽象层,将应用程序的界面表示抽象为一个虚拟的DOM树。这意味着开发人员可以使用相同的代码和逻辑来描述应用程序的用户界面,而不需要关心具体的平台实现细节。虚拟DOM允许开发人员使用一种统…

HashedWheelTimer详解

1、 前言 你好呀,我是歪歪。 今天我带大家来卷一下时间轮吧,这个玩意其实还是挺实用的。 常见于各种框架之中,偶现于面试环节,理解起来稍微有点难度,但是知道原理之后也就觉得: 大多数人谈到时间轮的时候都…

chatgpt赋能python:Python关键词用法介绍

Python关键词用法介绍 Python是一种高级编程语言,具有简洁易懂、易于学习等特点。作为一位10年的Python工程师,我发现掌握Python的关键词用法对于编程非常重要。因此,本文将重点介绍Python关键词的用法,并为您提供相关的代码示例…

iOS加固保护新思路

之前有写过【如何给iOS APP加固】,但是经过一段时间的思考,我找到了更具有实践性的代码,具体可以看下面。 技术简介 iOS加固保护是基于虚机源码保护技术,针对iOS平台推出的下一代加固产品。可以对iOS APP中的可执行文件进行深度…