【JAVA入门】键盘监听器KeyListener

守給你的承諾、 提交于 2020-01-30 18:56:33

概述

KeyListener是用于接收键盘事件(击键)的监听器接口。

使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。按下、释放或键入键时生成键盘事件。然后调用侦听器对象中的相关方法并将该 KeyEvent 传递给它。

方法

该接口的3个方法
void keyPressed(KeyEvent e) // 按下某个键时调用此方法。
void keyReleased(KeyEvent e) // 释放某个键时调用此方法。
void keyTyped(KeyEvent e) // 键入某个键时调用此方法。

KeyEvent

表示组件中发生键击的事件。

当按下、释放或键入某个键时,组件对象将生成此低级别事件。该事件被传递给每一个 KeyListener 或 KeyAdapter 对象。

主要用到的方法:
public int getKeyCode() // 返回与此事件中的键关联的整数 keyCode。
public char getKeyChar() // 返回与此事件中的键关联的字符

keyCode是一个整数,代表了这个键的编码。
keyChar是指这个键的值,例如某个字母、某个数字、某个符号。

一个keyCode不一定只对应一个按键,keyChar也不一定只对应一个按键。
例如,键盘上方的数字跟小键盘的数字,它们的keyChar相同,但是keyCode不一样。
再例如,左边的shift、ctrl和右边的shift、ctrl,keyCode和keyChar都是一样的(要区分就用getKeyLocation方法)。

详细每个键对应的keyCode可以看看这篇博客: https://blog.csdn.net/KIG_cat/article/details/50676885

如何使用

首先用一个监听器类实现KeyListener接口,然后创建对象,在组件上用addKeyListener方法添加监听器。
但是我一开始尝试在JPanel上添加这个监听器对象之后,没有报错,但实际按下键盘却没有反应。百度了一下,发现还漏了一步,就是要让组件获得焦点
所以还要在JFrame设置可见之后,让JPanel获得焦点,可以用 void requestFocus() 方法:请求此 Component 获取输入焦点,并且此 Component 的顶层祖先成为获得焦点的 Window。也可以使用 requestFocusInWindow 方法:如果此 Component 的顶层祖先已经是获得焦点的 Window,则请求此 Component 获取输入焦点。更推荐后者,因为可在各种平台之间一致地实现此方法的焦点行为。

frame.setVisible(true);   //要在这一步之后。。。
// ......
mainPanel.addKeyListener(listener);   //添加按键监听器
mainPanel.requestFocusInWindow();     //获得焦点
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!