如何在keyTypedEvent中检测退格



我使用Netbeans的bean形式来创建我的GUI。
我已经添加了一个keyTyped事件到JTextArea,我想检测键入的键是否为退格

我使用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

常量列在这里:类KeyEvent

从docs.oracle.com

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

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

附加:

getKeyChar()可以很好地与KEY_TYPED一起工作,正如这里提到的:

getKeyChar方法总是返回一个有效的Unicode字符或CHAR_UNDEFINED。字符输入由KEY_TYPED事件报告:KEY_PRESSEDKEY_RELEASED事件不一定与字符输入相关。

因此,getKeyChar方法的结果保证只对KEY_TYPED事件有意义。

你可以看看这些链接:

keyTyped()事件仅用于产生字符输入的键。

"关键typed"事件是高级别的,通常不依赖于平台或键盘布局。

您不能使用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...
    }
}

额外阅读

您可以查看官方Java教程如何编写键侦听器

我认为可以在"KeyTyped"事件。您可以将该字符的十六进制值与常量keyeevent . vk_back_space的十六进制值进行比较。

示例(仅当键入的键为Backspace时返回true,否则返回false并消耗事件):

public static boolean CheckBackspace(KeyEvent e) {
    if (!((Integer.toHexString(e.getKeyChar()).equals(Integer.toHexString(KeyEvent.VK_BACK_SPACE))))) {
        e.consume();
        return false;
    }
    return true;
}

最新更新