KeyTypedEvent KeyEvent的KeyCode始终为0?

时间:2013-02-05 19:01:13

标签: java swing keylistener keyevent

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

我制作了一个表单并将KeyListener附加到我的各种控件中:

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

keyTypedEvent定义如下:

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

我在println添加了evt,看看会发生什么,并验证我的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.

3 个答案:

答案 0 :(得分:26)

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

来自KeyEvent API:

  

"键入键入"事件是更高级别的,通常不依赖于   平台或键盘布局。它们是在Unicode时生成的   输入字符,是了解的首选方式   字符输入....

     

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

答案 1 :(得分:3)

答案 2 :(得分:0)

这很大程度上取决于按下的按键。您可能需要使用KeyListener方法覆盖keyPressed,因为keyTyped未在不可打印的字符上触发。

在此处查看keyTypedkeyPressed之间的区别: KeyListener, keyPressed versus keyTyped