Verwenden Sie javax.swing.Timer, um den Countdown-Timer in Java zu erstellen [duplizieren]

Mögliche Duplikate:
Stoppuhr mit Bedingung funktioniert nur beim ersten Mal?

Ich bin sehr verwirrt, wie man einen Timer mit dem Swing macht und keinen Timer benutzt.

Ich mache ein Spiel, in dem Benutzer Fragen innerhalb von 30 Sekunden beantworten müssen. Ich habe einen PlayFrame, in dem die Uhrzeit angezeigt wird, und eine Methode in PlayFrame namens startTimer, die alle Timer-Inhalte enthält.

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);
    }
}

Ich möchte, dass diese Methode einen Timer hat, der von 30 herunterzählt, bis die Frage richtig beantwortet wird. Wenn die Antwort falsch beantwortet wird, möchte ich, dass der Timer stoppt.

Für eine Antwort vielleicht ein Pseudocode (oder echter Code), um mich in die richtige Richtung zu bewegen. Und dies ist für den persönlichen Gebrauch, nicht für Hausaufgaben oder ähnliches.

Bitte denken Sie daran, dass dies ein Teil meines gesamten Codes ist und mit anderen Teilen davon zusammenarbeiten muss. Ich gebe weitere Informationen auf Anfrage, danke!

EDIT: Neue startTimer () MethodeHINWEIS Alle System.out.print dient nur zu Testzwecken:

  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");
}

Tut nichts und weiß nicht warum.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage