我使用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)?
backspace
和delete
有以下常数:
VK_BACK_SPACE
VK_DELETE
常量列在这里:类KeyEvent
从docs.oracle.com警告:除了那些由Java语言定义的键(
VK_ENTER
,VK_BACK_SPACE
和VK_TAB
)之外,不要依赖VK_
常量的值。Sun保留根据需要更改这些值的权利,以适应将来更广泛的键盘。
除此之外,我建议您使用keyPressed()
或keyReleased()
,因为keyTyped()
仅用于生成字符的键。键backspace
和delete
不产生字符
附加:
getKeyChar()
可以很好地与KEY_TYPED
一起工作,正如这里提到的:
getKeyChar
方法总是返回一个有效的Unicode字符或CHAR_UNDEFINED
。字符输入由KEY_TYPED
事件报告:KEY_PRESSED
和KEY_RELEASED
事件不一定与字符输入相关。因此,
getKeyChar
方法的结果保证只对KEY_TYPED
事件有意义。
你可以看看这些链接:
keyTyped()事件仅用于产生字符输入的键。
"关键typed"事件是高级别的,通常不依赖于平台或键盘布局。
您不能使用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...
}
}
额外阅读
您可以查看官方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;
}