使用javax.swing.Timer中进行倒数计时器在Java中[复制](Use javax.sw

2019-07-18 10:35发布

可能重复:
停止与条件仅适用第一次计时器?

我来了如何使用摆动,而不是util的计时器计时很困惑。

我想提出一个游戏,用户必须回答在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倒计时计时器。 如果答案是不正确回答我希望计时器停止。

一个答案也许是一些伪代码(或实际代码)移动我在正确的方向。 这是供个人使用,不做作业或任何东西。

请记住,这是我的全部代码的一部分,它需要与它的其它部分的工作。 我会根据要求提供更多的信息,谢谢!

编辑:新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");
}

没有做任何事情,不知道为什么。

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

}


文章来源: Use javax.swing.Timer to make countdown timer in Java [duplicate]