我正在使用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)?

最佳答案

backspacedelete具有以下常量:

VK_BACK_SPACE

VK_DELETE

常量在这里列出:
Class KeyEvent

来自docs.oracle.com


  警告:除了Java语言(VK_ENTERVK_BACK_SPACEVK_TAB)定义的那些键外,不要依赖VK_常量的值。 Sun保留根据需要更改这些值的权利,以在将来适应更大范围的键盘。


除此之外,我建议您使用keyPressed()keyReleased(),因为keyTyped()仅用于产生字符的键。键backspacedelete不产生字符。

额外:

getKeyChar()KEY_TYPED配合良好,如here:所述


  getKeyChar方法始终返回有效的Unicode字符或CHAR_UNDEFINED。字符输入由KEY_TYPED事件报告:KEY_PRESSEDKEY_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.

10-08 19:32