我正在使用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 (或删除)?
答案 0 :(得分:2)
backspace
和delete
具有以下常量:
VK_BACK_SPACE
VK_DELETE
此处列出了常量: Class KeyEvent 强>
警告:除了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.
答案 1 :(得分:2)
您无法使用keyTyped
,您需要使用keyPressed
或keyReleased
来确定是否已键入退格字符。 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教程。