Используйте javax.swing.Timer, чтобы сделать таймер обратного отсчета в Java
Возможный дубликат:
Стоп таймер с условно работает только в первый раз?
Я очень смущен тем, как сделать таймер, используя качели, а не утилизируемый таймер.
Я делаю игру, в которой пользователи должны отвечать на вопросы в течение 30 секунд. У меня есть PlayFrame, где отображается время, и метод внутри PlayFrame, называемый startTimer, который содержит все вещи таймера.
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 до правильного ответа на вопрос. Если ответ получен неверно, я хочу, чтобы таймер остановился.
Для ответа, возможно, какой-нибудь psuedocode (или реальный код), чтобы переместить меня в правильном направлении. И это для личного пользования, а не для домашней работы или чего-то еще.
Пожалуйста, помните, что это часть всего моего кода, и он должен работать с другими его частями. Я дам больше информации по запросу, спасибо!
РЕДАКТИРОВАТЬ: Новый метод startTimer() ПРИМЕЧАНИЕ. All 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");
}
Ничего не делает и не уверен почему.
1 ответ
Вот как я бы сделал таймер обратного отсчета:
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...
}
}
}