netbeans 如何在keyTypedEvent中检测退格

yzxexxkh  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(210)

我使用Netbeans的bean表单来创建我的GUI。
我已将keyTyped事件添加到JTextArea中,并且希望检测键入得键是否为Backspace.
我使用keyTyped事件是出于其他原因,因此我不能只使用keyPressed事件。
下面是生成的代码(如果选中,也是我的代码):

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)?

h7appiyu

h7appiyu1#

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.

ssgvzors

ssgvzors2#

不能使用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教程。

t40tm48m

t40tm48m3#

我认为可以在“KeyTyped”事件中检查Backspace。您可以将字符的十六进制值与常量KeyEvent的十六进制值进行比较。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;
}

相关问题