KeyListener的一些问题

本文介绍了在Java Swing中为JFrame添加KeyListener的具体方法,并解决了按键无反应的问题。通过设置JFrame的setFocusable属性,可以确保窗口获得焦点,进而响应键盘事件。此外,还详细解释了KeyCode、KeyID和KeyChar的概念及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到一个问题,那就是为JFrame添加KeyListener时发现按键没反应,最后的解决方案是为JFrame设置setFocusable(true);以获取焦点。
之后发现这种方法指标不治本,当点击按钮后按键又没有反应了,因为焦点转移到了按钮上,解决方法是为每个按钮都加上KeyListener,
注意即使JFrame实现了KeyListener,依然需要为JFrame添加事件监听器才可以。

第二个问题是KeyCode、KeyID、KeyChar都是什么意思呢?
        - KeyID:即事件ID,描述事件的状态
        - KeyCode:键盘上每一个按钮都有对应码(Code),可用来查知用户按了什么键, 如[Shift]键code为16。
                利用getKeyCode()方法就可以得知这个码,不过读者要注意,这个方法在keyTyped() 上是无法检测出来的,
                因为keyTyped()只管用户输入的字符,而不会管到键盘的对应码。
                因此你一定要将getKeyCode()方法写keyPressed()或keyReleased()方法中才会有效,因为这两个方法是处理比较低层的方法。
        - KeyChar:处理的是比较高层的事件,返回的是每欠敲击键盘后得到的字符(中文输入法下就是汉字)
        - KeyModifiersText:你可以直接使用getModifiers()方法来得到modifiers参数。
                这个方法是定义在 InputEvent类中,而KeyEvent继承它,因此就能直接使用这个方法。
                同样,你必须将getKeyModifiersText()与 getModifiers()方法放在keyPressed()或keyReleased()方法中才会有效。

附上 键盘KeyCode值列表
keycode

keycode

keycode

keycode

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值