使用javax.swing.Timer在Java中生成倒数计时器

时间:2013-01-18 19:01:20

标签: java swing netbeans countdowntimer javax.swing.timer

  

可能重复:
  Stop timer with conditional only works first time?

我很惊讶如何使用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");
}

什么都不做,不知道为什么。

1 个答案:

答案 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...
        }
    }

}