KeyEvent事件

2023-11-09


Java按键事件KeyEvent


按键事件可以利用键盘来控制和执行一些动作,或者从键盘上获取输入,只要按下,释放一个键或者在一个组件上敲击,就会触发按键事件。KeyEvent对象描述事件的特性(按下,放开,或者敲击一个键)和对应的值。java提供KeyListener接口处理按键事件。

 当按下一个键时会调用KeyPressed处理器,当松开一个键时会调用KeyReleased处理器,当输入一个统一编码时会调用KeyTyped处理器。如果这个键不是统一码(如功能键,修改键,动作键和控制键)
 每个按键事件有一个相关的按键字符和按键代码,分别由KeyEvent中的getKeyChar()和getKeyCode()方法返回

 getKeyChar():  char           返回这个事件中和键相关的字符
 getKeyCode():  int             返回这个事件中和键相关的整数键

keyPressed(e: KeyEvent) 在源组件上按下一个键后被调用
KeyReleased(e: KeyEvent) 在源组件上释放一个键后被调用
KeyTyped(e: KeyEvent) 在源组件上按下一个键然后释放该键后被调用

按键常量


VK_HOME           Home键                          VK_CONTROL                  控制键
VK_END            End键                             VK_SHIFT                       shift键
VK_PGUP          page up键                       VK_BACK_SPACE             退格键
VK_PGDN          page down键                   VK_CAPS_LOCK              大小写锁定键
VK_UP              上箭头                            VK_NUM_LOCK                小键盘锁定键
VK_DOWN         下箭头                            VK_ENTER                      回车键
VK_LEFT           左箭头                            VK_UNDEFINED                未知键
VK_RIGHT          右箭头                           VK_F1--VK_F12                F1 -- F12
VK_ESCAPE       Esc键                              VK_0 --VK_9                    0 --- 9
VK_TAB             Tab键                             VK_A --VK_Z                    A----Z

getKeyCode() 返回定义在表中的值
getKeyChar() 返回输入的字符

 1 import java.awt.*;
 2 import java.awt.event.*;
 3 import javax.swing.*;
 4  
 5 public class KeyEventDemo extends JFrame{
 6         private KeyboardPanel keyboardPanel = new KeyboardPanel();
 7        
 8         public KeyEventDemo(){
 9               add( keyboardPanel);
10               
11                keyboardPanel.setFocusable(true);
12               
13        }
14        
15         public static void main(String[] args){
16               KeyEventDemo frame = new KeyEventDemo();
17               frame.setTitle( "KeyEventDemo");
18               frame.setSize(300,300);
19               frame.setLocationRelativeTo( null);
20               frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
21               frame.setVisible( true);
22               
23        }
24        
25         static class KeyboardPanel extends JPanel{
26                private int x = 100;
27                private int y = 100;
28                private char KeyChar = 'A' ;
29               
30                public KeyboardPanel(){
31                      addKeyListener( new KeyAdapter(){
32                             public void keyPressed(KeyEvent e){
33                                    switch(e.getKeyCode()){
34                                    case KeyEvent.VK_DOWN: y += 10;break;
35                                    case KeyEvent.VK_UP: y -= 10; break;
36                                    case keyEvent.VK_LEFT: x -= 10; break;
37                                    case KeyEvent.VK_RIGHT: x += 10; break;
38                                    default: keyChar = e.getKeyChar();
39                                   }
40                                   
41                                   repaint();
42                            }
43                      });
44               }
45               
46                protected void paintComponent(Graphics g){
47                       super.paintComponent(g);
48                      
49                      g.setFont( new Font("TimesRoman" ,Font.PLAIN,24));
50                      g.drawString(String. valueOf(KeyChar), x, y);
51               }
52        }
53 }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KeyEvent事件 的相关文章

随机推荐

  • Linux下删除文件名中包含特殊字符的文件

    Linux下删除文件名中包含特殊字符的文件 在windows下不管什么文件名的文件delete一下全废掉 再顽固的用第三方软件粉碎一下就ok 在linux命令行下就不一样了 rm命令时常删除不掉拥有千奇百怪的文件名 特殊字符 超长字符 各种
  • 结合promise与websocket的发布/订阅模式实践

    结合promise与websocket的发布 订阅模式实践 本文初衷 最近恰好在公司做了一个聊天室系统 所以在系统中做了一下对websocket进行的promise化改造 所以想写篇文章总结一下 如果大家有什么更好的方法或者心得感悟 欢迎交
  • 鸿蒙3.0怎么升级,升级鸿蒙OS3.0机型曝光!大哥,你是认真的吗?

    鸿蒙OS系统 可真是 千呼万唤始出来 啊 自2017年华为开始研发鸿蒙内核1 0 2018年进展至鸿蒙内核2 0 2019年正式推出了鸿蒙OS1 0系统 并在发布会上预计2021年发布鸿蒙OS3 0系统 虽然在开发者大会上 华为宣布在智能手
  • notepad++ 如何以16进制比较两个文件

    Notepad 不支持直接以十六进制比较两个文件 但你可以通过使用插件来实现这个功能 以下是使用 Compare Plugin 插件进行文件比较的步骤 安装 Compare Plugin 插件 打开 Notepad 点击菜单栏的 插件 Pl
  • 如何在Java中使用protobufjava进行protobuf生成器编写

    作者 禅与计算机程序设计艺术 最近随着微服务架构的流行 越来越多的人选择了基于RPC框架 比如dubbo springcloud 实现服务之间的通信 而这些RPC框架默认使用的协议则是基于Google的Protocol Buffers 简称
  • 几种优化(求最优解)算法的比较

    遗传算法 优点是能很好的处理约束 能很好的跳出局部最优 最终得到全局最优解 全局搜索能力强 缺点是收敛较慢 局部搜索能力较弱 运行时间长 且容易受参数的影响 遗传算法适合求解离散问题 具备数学理论支持 但是存在着汉明悬崖等问题 模拟退火 优
  • ChatGPT与人类情感理解的挑战:解读复杂的情绪和态度

    导言 人类情感是复杂而多变的 涉及各种情绪 态度和情感表达方式 对于机器来说 理解和解读人类情感是一项具有挑战性的任务 然而 随着自然语言处理技术的进步 像ChatGPT这样的模型逐渐能够参与人类情感的解读和理解 本文将探讨ChatGPT在
  • 面试题-面经及知识重点

    1 葵花宝典 https blog csdn net jackfrued article details 44921941 1 面试整理 http www jfox info gao shou zheng zheng li java che
  • 计算机毕业设计之垃圾分类公益回收管理系统

    垃圾分类公益回收管理系统的开发过程中 采用B S架构 主要使用Java技术进行开发 结合最新流行的springboot框架 使用Mysql数据库和Eclipse开发环境 该垃圾分类公益回收管理系统包括用户 回收者和管理员 其主要功能包括垃圾
  • jstl引入maven项目常见问题

    在jsp页面中引入jstl标签库报错问题 1 引入标签时报错 排查历史 最后尝试通过降低jstl版本解决问题 2 jstl 在eclipse 中无法使用 解决方案 jstl jar 与 stand jar 单独下载而没有带c tld文件 下
  • idea 创建application.yml文件不变小叶子的解决方法

    首先你的确保你的pom xml中的包是全的 1 点击 2 选到你没有变小叶子的项目 3 将Spring加进去
  • SQL 快速插入数据 1000万条数据

    insert into 表名 select generate series 0 10000000 md5 random text clock timestamp
  • Unity内实现高级相机效果

    Cinemachine插件可以快速实现各种相机效果 例如跟随 分镜 推拉式镜头等 配合Timeline可以创建Cinemachine Track实现动画融合 从PackageManager上可以下载Cinemachine插件 它有以下几种类
  • Linux Bash单方括号与双方括号 [和[[的区别

    本文参考 Burak G kmen 的文章 Differences Between Single and Double Brackets in Bash 单括号 是 shell builtin 即 test 内置命令 type is a s
  • Spring boot Shiro anno不启作用问题分析

    1 分析 之前在Shiro中没有配置过静态资源过滤 这次在配置过程中给予静态资源anno发现还是会被拦截 查阅其它博客 基本上都是在说LinkedHashMap 过滤次序问题 但我最初就是这个 因此排除 后再翻阅相关博客的时候看到了 大佬博
  • 输出杨辉三角形(要求输出10行)

    include
  • Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析

    Pandas是最流行的用于数据分析的 Python 库 它提供高度优化的性能 后端源代码完全用C或Python编写 我们可以通过以下方式分析 pandas 中的数据 1 Series 2 数据帧 Series Series 是 pandas
  • TypeScript总结 一【数组,联合,交叉类型】

    最近刚把ts学完 简单总结一下 ts的话 更强调类型 更加严谨 非原始类型 1 object 不包括基础数据类型 小写的 let obj object a 1 let obj object 1 2 Object 包括基础数据类型 大写的O
  • 基于ARM的自来水厂全自动恒压供水监控系统

    文末下载完整资料 随着越来越多的场合正向自动化无人职守迈进 尤其在安全 监控等领域 为了进一步降低成本 减少人力的投资 以及更集中 更方便的掌握现场情况 许多场合都采用了电子监控设备 如办公室 发电站 机场 海关等等领域 而这些电子设备的设
  • KeyEvent事件

    Java按键事件KeyEvent 按键事件可以利用键盘来控制和执行一些动作 或者从键盘上获取输入 只要按下 释放一个键或者在一个组件上敲击 就会触发按键事件 KeyEvent对象描述事件的特性 按下 放开 或者敲击一个键 和对应的值 jav