我很惊讶如何使用swing而不是util计时器来制作计时器。
我正在制作一款游戏,用户必须在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");
}
什么都不做,不知道为什么。
答案 0 :(得分: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...
}
}
}