重複の可能性:
条件付きの停止タイマーは最初にのみ機能しますか?
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");
}
何もしませんし、理由もわかりません。