如何检测keyTypedEvent

时间:2015-06-06 06:51:56

标签: java netbeans keyboard-events backspace

我正在使用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 (或删除)?

2 个答案:

答案 0 :(得分:2)

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_UNDEFINEDKEY_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.

答案 1 :(得分:2)

您无法使用keyTyped,您需要使用keyPressedkeyReleased来确定是否已键入退格字符。 keyTyped事件仅捕获非转义字符(仅可显示的字符)。

可以使用KeyEvent.VK_BACK_SPACE检查退格符。

尝试将此侦听器添加到keyPressed事件:

import java.awt.event.KeyEvent;

private void langArea1KeyPressed(KeyEvent evt) {   
    if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
        // Do something...
    }
}

补充阅读

您可以查看How to Write a Key Listener上的官方Java教程。