KeyTypedEvent 的 KeyEvent 的 KeyCode 始终为 0?

2022-09-02 20:25:11

我在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()));
} 

我向 添加了 一个,以查看会发生什么情况并验证我的键列表器是否正常工作。当我构建并运行我的应用程序时,我意识到输出似乎总是有一个printlnevtkeycode = 0

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

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

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

例如,VK_ESCAPE的值为 27。


答案 1

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

KeyEvent API:

“键键入”事件是较高级别的,通常不依赖于平台或键盘布局。它们是在输入 Unicode 字符时生成的,并且是查找字符输入的首选方法。

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


答案 2