2

可能重复:
有条件的停止计时器只能在第一次工作?

我对如何使用 swing 而不是 util timer 制作计时器感到非常困惑。

我正在制作一个游戏,用户必须在 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");
}

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

4

1 回答 1

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

}
于 2013-01-18T19:23:53.020 回答