【发布时间】:2011-05-14 18:16:20
【问题描述】:
这是我的情况: 我正在开发一个 java 打字游戏,我需要为我的 JTextField 找到最好的监听器。
JTextField typeBox;
侦听器应该能够检测到用户的输入,将框内的文本发送到游戏主部分进行处理,如果到达单词的结尾,则类型框必须清除(因此用户可以一次输入一个单词,就像在通常的打字游戏中一样)。 我试过 KeyListener
public class TypeBoxListener implements KeyListener
{
@Override
public void keyPressed(KeyEvent arg0) {
}
@Override
public void keyReleased(KeyEvent arg0) {
if (arg0.getKeyChar() == arg0.CHAR_UNDEFINED) return;
String typedText = typeBox.getText();
thisGUI.processUserInput(typedText);
}
@Override
public void keyTyped(KeyEvent arg0) {
}
}
这样的问题是,当用户在没有释放键的情况下到达一个单词的结尾,并立即键入另一个键,这个新键就丢失了。
我也试过 DocumentListener
public class TypeBoxListener implements DocumentListener
{
@Override
public void changedUpdate(DocumentEvent arg0) {
}
@Override
public void insertUpdate(DocumentEvent arg0) {
String typedText = paragraphPanel.typeBox.getText();
thisGUI.processUserInput(typedText);
}
@Override
public void removeUpdate(DocumentEvent arg0) {
String typedText = paragraphPanel.typeBox.getText();
thisGUI.processUserInput(typedText);
}
}
此方法比使用 keyReleased 响应更快,但是,我无法使用此方法清除文本框,因为我会在尝试修改 DocumentListener 中的文档时遇到 IllegalStateException。
【问题讨论】:
标签: java events listener jtextfield