程序功能

捕捉用户在键盘上的按键,按键分为三种类型:

1. 操作键(Action Key)(箭头、Home、End、翻页键、功能键(F1-F12)、INSERT键、PRINT SCREEN键、CAPS LOCK键、WINDOWS键等,但不包括DELETE键)

2. 普通键(Key)(字符键,包括字母、数字、标点符号、特殊符号、确认键、删除键、回退键等)

3. 辅助键(Modifier Key)(转换键SHIFT、控制键CTRL、替换键ALT等)

注:TAB键和FN键未被本程序识别,难道是不属于以上类型?

总结如下:由下表测试结果小结来看,普通键和操作键、辅助键的最大区别在于普通键按住不放可以连续输入,而另外两种按键则不行。

按键类型 按键动作类型 键盘事件类型
操作键 按住不放 keyPressed
操作键 按一下松开 keyReleased
字符键 按住不放 keyTyped
字符键 按一下松开 keyReleased
辅助键 按住不放 keyPressed
辅助键 按一下松开 keyReleased

运行结果示例:

代码:

注:本文代码基于Java How to Program, 第10版, 第12章:GUI组件修改而成。

1. 测试类

// Fig. 12.37: KeyDemo.java
// Testing KeyDemoFrame.
import javax.swing.JFrame;public class KeyDemo
{public static void main(String[] args){ KeyDemoFrame keyDemoFrame = new KeyDemoFrame(); keyDemoFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);keyDemoFrame.setSize(1000, 300); keyDemoFrame.setVisible(true); }
} // end class KeyDemo

2. 实体类

// Fig. 12.36: KeyDemoFrame.java
// Key event handling.
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextArea;public class KeyDemoFrame extends JFrame implements KeyListener
{/*** */private static final long serialVersionUID = 1L;
private String line1 = ""; // first line of textareaprivate String line2 = ""; // second line of textareaprivate String line3 = ""; // third line of textareaprivate JTextArea textArea; // textarea to display output// KeyDemoFrame constructorpublic KeyDemoFrame(){super("Demonstrating Keystroke Events(键盘按键事件演示程序)");textArea = new JTextArea(30, 45); // set up JTextAreatextArea.setText("Press any key on the keyboard...(请按下键盘上的任意按键)");textArea.setEnabled(false);textArea.setDisabledTextColor(Color.BLACK);textArea.setFont(new Font("Sun", Font.PLAIN, 20));add(textArea); // add textarea to JFrameaddKeyListener(this); // allow frame to process key events} // handle press of any key@Overridepublic void keyPressed(KeyEvent event){line1 = String.format("Key pressed(按键已按下且未被松开): %s", KeyEvent.getKeyText(event.getKeyCode())); // show pressed keysetLines2and3(event); // set output lines two and three}// handle release of any key@Overridepublic void keyReleased(KeyEvent event){line1 = String.format("Key released(按键已松开): %s",KeyEvent.getKeyText(event.getKeyCode())); // show released keysetLines2and3(event); // set output lines two and three}// handle press of an action key@Overridepublic void keyTyped(KeyEvent event){line1 = String.format("Key typed(按键已按下,但未松开,正在重复键入该按键): %s", event.getKeyChar());setLines2and3(event); // set output lines two and three}// set second and third lines of outputprivate void setLines2and3(KeyEvent event){line2 = String.format("This key is %san action key(该按键%s操作键:箭头、Home、End、翻页键、功能键等)", (event.isActionKey() ? "" : "not "),(event.isActionKey() ? "是" : "不是"));String temp = KeyEvent.getKeyModifiersText(event.getModifiers());line3 = String.format("Modifier keys pressed(已按下的辅助键(转换键SHIFT、控制键CTRL、替换键ALT等)) : %s", (temp.equals("") ? "none(无)" : temp)); // output modifierstextArea.setText(String.format("%s\n%s\n%s\n", line1, line2, line3)); // output three lines of text}
} // end class KeyDemoFrame

学以致用——Java源码——键盘事件演示程序(Keystroke Events Demo Program)相关推荐

  1. 学以致用——Java源码——抛双骰游戏图形界面版(GUI-Based Craps Game)

    游戏简介: 1. 抛双骰游戏的Swing界面版(CLI命令行版本见:学以致用--Java源码--抛双骰儿游戏改进版(Craps Game Modification with wagering),htt ...

  2. java怎么录入4位会员号_[Java源码]键盘输入会员卡号,对其格式、位数进行判断,不符合规则会跳转重新输入 | 学步园...

    4位数的会员卡号,活动期间,4位数字求平均值为5,则商品免费 -----------------------背景-------------------------------分割线---------- ...

  3. 学以致用——Java源码——使用Graphics2D类draw方法绘制立方体(Drawing Cubes)

    程序功能: 使用Graphics2D类draw方法绘制立方体 运行示例: 源码: 1. 实体类 import java.awt.Graphics2D; import java.awt.Polygon; ...

  4. 学以致用——Java源码——使用随机几何图形制作屏保程序(Screen Saver with Shapes Using the Java 2D API)

    程序功能: 使用随机输出的几何图形作为屏保程序,用户可随时指定屏幕上要显示的图形元素的数量. 运行示例: 源码: 1. 实体类 import java.awt.Graphics; import jav ...

  5. 学以致用——Java源码——使用Graphics类drawRect方法绘制表格(Grid Using Method drawRect)

    程序功能: 使用Graphics类drawRect方法绘制10*10表格. 运行结果: 源码: 1. 实体类 //Creating JFrame to display DrawPanel. impor ...

  6. 学以致用——Java源码——员工薪酬系统功能增强(Payroll System Modification)

    程序功能: 1. 基类:Emplyee(普通员工)(姓名.生日.身份证号) 2. 直接子类:SalariedEmployee(固定工资员工),HourlyEmployee(小时工).Commissio ...

  7. 学以致用——Java源码——抛硬币(Coin Tossing)

    十年一晃而过,十年前写的代码,依然可以帮助我前进! package exercises.ch6Methods;import java.util.*;//JHTP Exercise 6.29 (Coin ...

  8. 学以致用——Java源码——使用多态输出平面及立体几何图形的面积和体积(Project: Shape Hierarchy)

    程序功能: 使用继承和多态的面向编程思想,动态的判断几何形状,打印平面图形面积及立体几何图形的面积和体积. 这个习题让我从无到有创建了共10个类才完成,虽然简单,但是作为继承和多态的入门练习还是不错的 ...

  9. java 事件分发机制_读Android源码之事件分发机制最全总结

    原标题:读Android源码之事件分发机制最全总结 本文源码来自andorid sdk 22,不同版本会有细微差别,但核心机制是一致的 一.概述 事件分发有多种类型, 本文主要介绍Touch相关的事件 ...

最新文章

  1. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码...
  2. 大学生创新创业大赛案例_第五届“南博杯”大学生创新创业大赛决赛举行
  3. 别人想你请教事情你正确的态度
  4. Shell 去掉文本中的空格
  5. Java基础18(类加载、反射和动态代理)
  6. java与java ee_RxJava + Java8 + Java EE 7 + Arquillian =幸福
  7. 哥大计算机专业 世界排名,哥伦比亚大学计算机科学硕士排名第16(2020年TFE Times排名)...
  8. python 隐含波动率_【BSM模型】用实际市场数据计算隐含波动率并验证波动率微笑...
  9. 列名 userid 不明确。 表结构_SQL-Server(三)表的创建和操作
  10. XML Schema帮你建模
  11. css环形进度条clip,clip实现圆环进度条
  12. 汉字拼音数据库_WinDev
  13. python 视频播放 拖动_python + opencv鼠标拖动视频区域裁剪
  14. openGL绘制带纹理地球,并实现鼠标键盘控制
  15. ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置
  16. 任正非5年后重新强调:华为到了炸研发金字塔的时候
  17. DenseBox 论文笔记
  18. awd的批量脚本 pwn_北极星杯 awd复现
  19. 软件实施工程师远程连接_新研究生远程软件工程师的大流行生存指南。
  20. 前端框架Vue中各个文件夹的具体作用简介

热门文章

  1. 网络电视服务器是什么系统,网络视频直播系统
  2. [附源码]Nodejs计算机毕业设计基于售楼系统Express(程序+LW)
  3. Android App开发--电话拦截
  4. OpenProcess | Process32First | GetExitCodeProcess - WINDOWS API 第二弹 非通信方式的子进程获取父进程信息
  5. 三条命令激活win8.1与Office2013
  6. RuntimeError: Cannot re-initialize CUDA in forked subprocess
  7. 基于Docker搭建Elasticsearch集群
  8. HDU5775 Bubble Sort树状数组
  9. 室内定位解决方案-最新全套文件
  10. 微信QQ发布新版,接近一个G?内置4个虚拟引擎,这才叫做“大”更新