【问题标题】:KeyTypedEvent KeyEvent's KeyCode is always 0?KeyTypedEvent KeyEvent的KeyCode总是0?
【发布时间】:2013-01-20 19:32:17
【问题描述】:

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

我在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。

【问题讨论】:

  • 不要使用 KeyListener。使用 DocumentListener 或 Swing 键绑定。

标签: java swing keylistener keyevent


【解决方案1】:

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

来自KeyEvent API:

“键类型”事件是更高级别的,通常不依赖于 平台或键盘布局。它们是在 Unicode 时生成的 字符被输入,并且是查找有关信息的首选方式 字符输入......

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

【讨论】:

  • 真的救了我的命!
【解决方案2】:

【讨论】:

    【解决方案3】:

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

    在这里查看keyTypedkeyPressed 之间的区别: KeyListener, keyPressed versus keyTyped

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2011-05-19
      • 2013-02-22
      • 1970-01-01
      • 2016-08-13
      • 2012-11-15
      相关资源
      最近更新 更多