我正在制作自定义文本字段(绘制文本而不是使用JTextField)。我可以输入字符,但退格只清除一个字符。然后,如果我写更多内容,我可以再删除一个字符。我不明白为什么。
的KeyListener:
class KeyController implements KeyListener {
public void keyPressed(KeyEvent e) {
if (!chat.getUsing()) {
player.keyPressed(e);
} else if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
chat.keyTyped(e);
}
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
if (chat.getUsing()) {
chat.setUsing(false);
} else {
chat.setUsing(true);
}
}
}
public void keyReleased(KeyEvent e) {
if (!chat.getUsing()) {
player.keyReleased(e);
}
}
public void keyTyped(KeyEvent e) {
if (chat.getUsing() && e.getKeyCode() != KeyEvent.VK_BACK_SPACE) {
chat.keyTyped(e);
}
}
}
聊天对象中的keyTyped()方法:
public void keyTyped(KeyEvent ev) {
if (ev.getKeyCode() != KeyEvent.VK_BACK_SPACE) {
currentText += ev.getKeyChar();
} else {
if (currentText.length() > 0) {
currentText = currentText.substring(0, currentText.length() - 1);
}
}
}
我正在绘制currentText字符串。
答案 0 :(得分:0)
试试这个
e.getKeyChar() != KeyEvent.VK_BACK_SPACE
取代
e.getKeyCode() != KeyEvent.VK_BACK_SPACE
在keyTyped()
方法中。
直接来自KeyEvent
getKeyChar方法始终返回有效的Unicode字符或CHAR_UNDEFINED。 KEY_TYPED事件报告字符输入:KEY_PRESSED和KEY_RELEASED事件不一定与字符输入相关联。因此, getKeyChar方法的结果保证仅对KEY_TYPED事件有意义。
对于按下键和释放键的事件,getKeyCode方法返回事件的keyCode。对于键类型事件,getKeyCode方法始终返回VK_UNDEFINED 。 getExtendedKeyCode方法也可以与许多国际键盘布局一起使用。
有关详情,请阅读Key Event。