在打字游戏中我应该为JTextField使用什么样的听众?

时间:2011-05-14 18:16:21

标签: java events listener jtextfield

这是我的情况: 我正在开发一个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。

1 个答案:

答案 0 :(得分:1)

您可以尝试将文本框清除代码定义为Runnable并通过SwingUtilities.html.invokeLater执行,以绕过IllegalStateException