我正在使用Netbeans的bean表单创建GUI。已向JTextArea中添加了keyTyped事件,我想检测键入的键是否为Backspace。
由于其他原因,我正在使用keyTyped事件,所以我不能仅使用keyPressed事件。
这是生成的代码(和我的if检查):
private void langArea1KeyTyped(java.awt.event.KeyEvent evt) {
if(evt.getChar()== backspace) //how can I make this check?
}
evt.getKeyCode()
始终返回0,与键入的键无关。evt.getKeyChar()
只是删除打印时最后打印的字符,因此我无法使用System.out.print(evt.getKeyChar())
来检测其值并进行检查。如何检测键入的键是否为Backspace(或Delete)?
最佳答案
backspace
和delete
具有以下常量:VK_BACK_SPACE
VK_DELETE
常量在这里列出:
Class KeyEvent
来自docs.oracle.com
警告:除了Java语言(VK_ENTER
,VK_BACK_SPACE
和VK_TAB
)定义的那些键外,不要依赖VK_
常量的值。 Sun保留根据需要更改这些值的权利,以在将来适应更大范围的键盘。
除此之外,我建议您使用keyPressed()
或keyReleased()
,因为keyTyped()
仅用于产生字符的键。键backspace
和delete
不产生字符。
额外:getKeyChar()
与KEY_TYPED
配合良好,如here:所述
getKeyChar
方法始终返回有效的Unicode字符或CHAR_UNDEFINED
。字符输入由KEY_TYPED
事件报告:KEY_PRESSED
和KEY_RELEASED
事件不一定与字符输入关联。
因此,保证getKeyChar
方法的结果仅对KEY_TYPED
事件有意义。
您可以查看以下链接:
The keyTyped() event is only used for keys that produce character input.
"Key typed" events are higher-level and generally do not depend on the platform or keyboard layout.