KeyTypedEvent KeyEvent 的 KeyCode 始终为 0?



我在NetBeans IDE中有一个Java Swing应用程序。

我制作了一个表格,并在我的各种控件上附加了一个KeyListener,例如:

    jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyTyped(java.awt.event.KeyEvent evt) {
            keyTypedEvent(evt);
        }
    });

并且CCD_ 1被定义为:

private void keyTypedEvent(java.awt.event.KeyEvent evt) 
{                               
System.out.println(evt);
appendDisplay(String.valueOf(evt.getKeyChar()));
} 

我在evt中添加了一个println,以查看发生了什么,并验证我的keylistener是否工作。当我构建和运行应用程序时,我意识到输出似乎总是有一个keycode = 0

为了验证这一点,我将println更改为evt.getKeyCode(),并且它总是返回0。

我可能完全误解了KeyCode的作用,但我认为它会与Oracle文档中的值一致:

http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_ESCAPE

例如,VK_ESCAPE的值为27。

keyTyped()事件仅用于产生字符输入的键。如果您想知道何时按下或释放任何键,您需要实现keyPressed()keyReleased()

来自KeyEvent API:

"密钥类型"事件级别较高,通常不依赖于平台或键盘布局。当Unicode字符,是了解字符输入。。。。

对于按键和按键释放事件,getKeyCode方法返回事件的keyCode。对于键类型的事件,getKeyCode方法总是返回VK_UNDEFINED。

  • 所有关于KeyListenerkeyTypedEvent0的建议都是错误的,即Button1.addKeyListener(new java.awt.event.KeyAdapter() {

  • 这些事件在JButtons API中正确实现,使用SwingAction或添加ActionListenerJButton 侦听Mouse and Key Event

  • 基本上,所有内容都在Oracle教程中介绍了如何使用按钮、复选框和单选按钮

这在很大程度上取决于按下的键。可能您需要KeyListenerkeyPressed方法重写,因为keyTyped不会在不可打印的字符上触发。

在此处查看keyTypedkeyPressed之间的差异:KeyListener,keyPressed与keyTyped

最新更新