我使用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)?
3条答案
按热度按时间h7appiyu1#
backspace
和delete
具有下列常数:VK_BACK_SPACE
VK_DELETE
此处列出了常量:Class KeyEvent
来自docs.oracle.com
警告:除了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.
ssgvzors2#
不能使用
keyTyped
,需要使用keyPressed
或keyReleased
来确定是否键入了退格字符。keyTyped
事件仅选取非转义字符(仅可显示的字符)。可以使用
KeyEvent.VK_BACK_SPACE
检查退格字符。尝试将此侦听器添加到
keyPressed
事件:附加阅读
您可以查看How to Write a Key Listener上的官方Java教程。
t40tm48m3#
我认为可以在“KeyTyped”事件中检查Backspace。您可以将字符的十六进制值与常量KeyEvent的十六进制值进行比较。VK_BACK_SPACE。
示例(仅当键入的键为Backspace时才返回true,否则返回false并使用事件):