2

重複の可能性:
条件付きの停止タイマーは最初にのみ機能しますか?

utilタイマーではなくswingを使ってタイマーを作る方法について私は非常に混乱しています。

私はユーザーが30秒の制限時間内に質問に答えなければならないゲームを作っています。時刻が表示されるPlayFrameと、すべてのタイマーを含むstartTimerというPlayFrame内のメソッドがあります。

public static void startTimer() {

    int elapsedSeconds = 0;
    javax.swing.Timer myTimer = new javax.swing.Timer(1000, new MyTimerActionListener());
    elapsedSeconds++;

    if (elapsedSeconds == 30) {
        myTimer.stop();
        timerLabel.setText("0");
        wrong();
    } else {
        String text = String.format("f", 30 - elapsedSeconds);
        timerLabel.setText(text);
    }

    if (myTimer != null && myTimer.isRunning()) {
        myTimer.stop();
        myTimer = null;
        timerLabel.setText("0");
    } else {
        elapsedSeconds = 0;
        myTimer = new javax.swing.Timer(1000, new MyTimerActionListener());
        myTimer.start();
        String text = String.format("t", 30);
        timerLabel.setText(text);
    }
}

この方法で実行したいのは、質問が正しく回答されるまで30からカウントダウンするタイマーを用意することです。答えが間違っている場合は、タイマーを停止します。

答えとしては、おそらく私を正しい方向に動かすためのいくつかの擬似コード(または実際のコード)があります。そして、これは個人的な使用のためであり、宿題や何かのためではありません。

これは私のコード全体の一部であり、他の部分と連携する必要があることを忘れないでください。リクエストに応じて詳細をお知らせします、ありがとうございます!

編集:新しいstartTimer()メソッドすべてのSystem.out.printはテスト専用です:

  public static void startTimer() {
    class TimerListener implements ActionListener {
        Timer timer = new Timer(1000, new TimerListener());
        int elapsedSeconds = 30;
        String seconds = Integer.toString(elapsedSeconds);

        @Override
        public void actionPerformed(ActionEvent evt) {
            timer.start();
            if (elapsedSeconds == 0) {
                //System.out.print("here");
                timer.stop();
                PlayFrame.wrong();
            }
            else{
                //System.out.print("hersfde");
                elapsedSeconds--;
            PlayFrame.timerLabel.setText(seconds);
            }
            //System.out.println(elapsedSeconds);
        }
    }
    //System.out.print("l");
}

何もしませんし、理由もわかりません。

4

1 に答える 1

8

これが私がカウントダウンタイマーを作る方法です:

Timer timer = new Timer(1000, new TimerListener());

class TimerListener implements ActionListener{
    int elapsedSeconds = 30;

    public void actionPerformed(ActionEvent evt){
        elapsedSeconds--;
        timerLabel.setText(elapsedSeconds)
        if(elapsedSeconds <= 0){
            timer.stop();
            wrong()
            // fill'er up here...
        }
    }

}
于 2013-01-18T19:23:53.020 に答える