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); } }); 

keyTypedEvent定义如下:

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

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

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

我可能完全误解了KeyCode的function,但我认为它可以与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。

  • 关于JButton KeyListener所有建议都是错误的,这意味着Button1.addKeyListener(new java.awt.event.KeyAdapter() {

  • 这些事件在 SwingAction JButtons API中实现并正确实现 ,使用SwingAction或添加ActionListener从/向JButton监听Mouse and Key Event

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

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

看看keyTypedkeyPressed之间的区别: KeyListener,keyPressed和keyTyped