我在NetBeans IDE中有一个Java Swing应用程序。
我制作了一个表格,并在我的各种控件上附加了一个KeyListener,例如:
jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
keyTypedEvent(evt);
}
});
并且CCD_ 1被定义为:
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。
keyTyped()
事件仅用于产生字符输入的键。如果您想知道何时按下或释放任何键,您需要实现keyPressed()
或keyReleased()
。
来自KeyEvent API:
"密钥类型"事件级别较高,通常不依赖于平台或键盘布局。当Unicode字符,是了解字符输入。。。。
对于按键和按键释放事件,getKeyCode方法返回事件的keyCode。对于键类型的事件,getKeyCode方法总是返回VK_UNDEFINED。
-
所有关于
KeyListener
对keyTypedEvent
0的建议都是错误的,即Button1.addKeyListener(new java.awt.event.KeyAdapter() {
-
这些事件在
JButtons API
中正确实现,使用SwingAction
或添加ActionListener
从JButton
侦听Mouse and Key Event
-
基本上,所有内容都在Oracle教程中介绍了如何使用按钮、复选框和单选按钮
这在很大程度上取决于按下的键。可能您需要KeyListener
和keyPressed
方法重写,因为keyTyped
不会在不可打印的字符上触发。
在此处查看keyTyped
和keyPressed
之间的差异:KeyListener,keyPressed与keyTyped