[教训][记录]关于java的KeyListener无法得到输入为[0-9,a-z,A-Z]和基本符号的KeyCode

本文记录了一个在Centos环境下使用AWT进行键盘监听时遇到的问题:无法监听到普通字母键,仅方向键有效。通过调整输入法设置从IBUS英文模式切换到en模式后,问题得以解决。

之前我把原来在Win写的一个AWT的一个简单练习迁到Centos下,却发现整个demo对键盘监听功能部分失效了,表现为方向键可以用,但普通字母都无法监听到,当时学习比较锦,在简单改动后问题没有得到解决就先放在一边了。

今天在码完一段Map的练习之后瞟见了这个module,才想起这么一个问题没解决。汗。。(重度拖延害死人)


class KeyListener extends KeyAdapter{

        @Override
        public void keyTyped(KeyEvent e) {
            super.keyTyped(e);
        }

        @Override
        public void keyPressed(KeyEvent e) {
            switch (e.getKeyCode()){
                case KeyEvent.VK_A  :
                    reStart();
                    break;
                case KeyEvent.VK_C :
                    wudi(0);
                    break;
                default:
                    System.out.println(e.getKeyCode());
            }
        }

        @Override
        public void keyReleased(KeyEvent e)
          }
    }

在这个片段中本来应该有输出KeyCode,但一直没有。


这个问题最后还是被解决了,原因是我用的IBUS的英文模式,在那个模式下,输入并没有被直接被得到(猜测)。换成en后问题解决。

Java中,`KeyListener`接口是用来监听键盘事件的,它包含三个方法:`keyTyped`、`keyPressed``keyReleased`。通过实现这个接口,并将其注册到某个组件(如`JFrame`、`JPanel`等)上,可以监听该组件上的键盘输入事件。 具体步骤如下: 1. 定义一个类实现`KeyListener`接口。 2. 在该类中重写`keyTyped`、`keyPressed``keyReleased`方法。这些方法会在键盘输入的不同阶段被调用。 - `keyTyped`方法在文本组件中输入或插入字符时被调用。 - `keyPressed`方法在键盘键被按下时被调用。 - `keyReleased`方法在键盘键被释放时被调用。 3. 创建一个实现了`KeyListener`接口的类的实例,并将其添加到需要监听键盘事件的组件上。 以下是一个简单的例子: ```java import javax.swing.*; import java.awt.event.*; public class KeyListenerExample { public static void main(String[] args) { JFrame frame = new JFrame("KeyListener Example"); frame.setSize(300, 200); MyKeyListener listener = new MyKeyListener(); frame.addKeyListener(listener); // 注册KeyListener frame.setVisible(true); } } class MyKeyListener implements KeyListener { @Override public void keyTyped(KeyEvent e) { System.out.println("keyTyped: " + e.getKeyChar()); } @Override public void keyPressed(KeyEvent e) { System.out.println("keyPressed: " + e.getKeyCode()); } @Override public void keyReleased(KeyEvent e) { System.out.println("keyReleased: " + e.getKeyCode()); } } ``` 在上面的代码中,我们创建了一个`KeyListenerExample`类,它包含了`main`方法一个`MyKeyListener`内部类。`MyKeyListener`类实现了`KeyListener`接口,并重写了其中的方法。在`KeyListenerExample`的`main`方法中,我们创建了一个窗口,并将`MyKeyListener`实例注册为该窗口的键盘监听器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值