Use javax.swing.Timer para fazer temporizador de contagem regressiva em Java [duplicado]
Duplicata Possível:
Parar timer com condicional só funciona pela primeira vez?
Estou muito confuso sobre como fazer um temporizador usando o swing e não o temporizador de util.
Estou fazendo um jogo em que os usuários precisam responder a perguntas em um limite de 30 segundos. Eu tenho um PlayFrame, onde a hora é mostrada, e um método dentro do PlayFrame chamado startTimer que contém todo o material do timer.
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);
}
}
O que eu quero que este método faça é ter um temporizador que conte de 30 até que a pergunta seja respondida corretamente. Se a resposta for respondida incorretamente, quero que o temporizador pare.
Por uma resposta talvez algum psuedocode (ou código real) para me mover na direção certa. E isso é para uso pessoal, não dever de casa ou qualquer coisa.
Lembre-se de que isso faz parte do meu código inteiro e precisa funcionar com outras partes dele. Vou dar mais informações a pedido, obrigado!
EDIT: Novo método startTimer ()NOTA all System.out.print é apenas para teste:
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");
}
Não faz nada e não sabe porquê.