如何以一秒的间隔显示Swing计时器的剩余时间?

时间:2014-06-16 05:20:26

标签: java swing timer actionlistener countdown

我一直在使用Java Applet开发一个简单的游戏,其中玩家的目标是在30秒的时间内获得尽可能多的积分。现在,我使用Swing计时器从30秒开始倒计时,一旦达到0标记,就可以使用#34;游戏结束"屏幕显示播放器的分数。我有这些实例变量:

ActionListener listener = new ActionListener() {
     @Override
     public void actionPerformed(ActionEvent e) {
        screenState = 0;
        repaint();
    }
};

Timer displayTimer = new Timer(30000, listener);

当玩家点击"播放"按钮,我执行displayTimer.start();

然后,我在我的绘画类中的相应案例中有这个:

g.drawString("Time Remaining: " + displayTimer.getDelay()/1000, 650, 100);

所以,显然,现在它只是显示静态"剩余时间:30",屏幕在30秒后切换。我想弄清楚的是我每隔一秒就能重新绘制这个值,以便它成为一个实时计时器。到目前为止,我能找到的唯一帮助是人们使用组件。

2 个答案:

答案 0 :(得分:3)

ActionListener listener = new ActionListener() {

     int count = 0;

     @Override
     public void actionPerformed(ActionEvent e) {
        if (count++==30) {
            screenState = 0;
        }
        repaint();
    }
};

Timer displayTimer = new Timer(1000, listener); // make it 30 times faster

答案 1 :(得分:0)

您可以使用Thread方法每隔一秒使用sleep方法使用public static void main(String[] args) { Thread t = new Thread(new Runnable() { @Override public void run() { int count = 0; while(true) { if(count == 30) //end at 30 second break; try { Thread.sleep(1000); System.out.println("updated"); ++count; } catch (InterruptedException e) { e.printStackTrace(); } } } }); t.start(); }

这是一个小样本,计数为30,间隔为1秒

{{1}}