KeyTypedEvent KeyEvent的KeyCode始终为0?

Rhs*_*Rhs 16 java swing keyevent keylistener

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

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

    jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyTyped(java.awt.event.KeyEvent evt) {
            keyTypedEvent(evt);
        }
    });
Run Code Online (Sandbox Code Playgroud)

并keyTypedEvent定义为:

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

我添加了一个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.

Rus*_*ser 29

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

从KeyEvent API:

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

对于按键和键释放事件,getKeyCode方法返回事件的keyCode.对于键类型事件,getKeyCode方法始终返回VK_UNDEFINED.