3

子供たちが基本的な算数を練習するために書いたプログラムがあります。JFrame には JTextField があり、学生は与えられた数学の問題の答えを入力します (8+8 のように、16 を入力して Enter を押します)。このフィールドは、DocumentFilter を介して整数値のみをエントリとして受け入れます。

その部分はうまく機能します。これでやりたいことは、ユーザーがエンターキーを押す必要がないようにすることです。理想的には、ユーザーが最初の数字 (1) を入力すると、1 == 16 かどうかがチェックされます。そうでない場合は何も起こりません。続いて 6 を入力すると、テキスト フィールドに数字の 16 が表示されます。チェックを実行して 16 == 16 かどうかを確認し、ユーザーが Enter キーも押したかのようにエントリを処理したいと考えています。

txtAnswer.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {               
            int key = e.getKeyCode();
            if (key == KeyEvent.VK_ENTER) {
                respondToAnswer(isTimed);
            } else {
                /* Check if the correct answer has been entered */
                System.out.println(txtAnswer.getText());
                //int userAnswer = Integer.parseInt(txtAnswer.getText());
                //if (userAnswer == correctAnswer {
                //   respondToAnswer(isTimed);
                //}
            }
        };
    });

このコードはあまり機能していません。まるで1文字後ろのようです。つまり、ユーザーが「1」キーを押すと (私の 8+8=16 の例では)、コンソール出力は空の文字列になります。「6」キーを押すと、出力は「1」になります。次に別の整数キーを押すと、出力は「16」になります。常に一桁遅れています。このため、テキスト フィールドの内容全体をキャプチャして、正解と一致するかどうかを確認することはできません。

私が欠けているものを見た人はいますか?

ありがとう!

4

2 に答える 2

5

DocumentListenerこの目的のために 使用する必要があります。keyPressedフィールド内のテキストが更新される前に発生する可能性があります。

詳細と例については、ドキュメント リスナーの作成方法を参照してください。

于 2013-02-06T23:47:27.563 に答える
5

DocumentListenerそのために の代わりに を使用しKeyListenerます。3 つのイベントすべてで、実際のテキスト コンテンツにアクセスできます。

EnterJTextField でリッスンするには、ActionListener

補足: . が必要になることはほとんどないはずですKeyListener。にJTextComponent、常に依存しDocumentListenerます。他のすべてについては、適切な Swing Key バインディングを使用してください。KeyListenerは本当に低レベルの API です。

于 2013-02-06T23:48:01.827 に答える