如何在JLabel上放置一个计时器来每秒更新一次

时间:2011-05-29 15:13:54

标签: java swing user-interface timer

我创建了一个游戏,在我的swing GUI界面中我想要一个计时器。我现在这样做的方式是有一个当前时间的字段,得到System.currentTimeMillis(),它在游戏开始时获得它的价值。在我的游戏方法中,我放了System.currentTimeMillis() - 字段;它会告诉你自游戏开始以来的当前时间。

然而,如何让它每秒更新一次让我们说,所以JLabel将有:timePassed:0s,timePassed:1s等等。请记住,我不会在游戏中使用线程。

编辑:谢谢大家的善意建议。我结合你的答案请给我一些反馈。

我将jlabel称为时间字段。 (否则我无法处理它)。

time = new JLabel("Time Passed:  " + timePassed() + " sec");
    panel_4.add(time);

    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            time.setText("Time Passed: " + timePassed() + " sec");
        }
    };
    Timer timer = new Timer(1000, actionListener);
    timer.start();

4 个答案:

答案 0 :(得分:6)

这就是我将JLabel设置为随时间更新的方式。日期。

Timer SimpleTimer = new Timer(1000, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        jLabel1.setText(SimpleDay.format(new Date()));
        jLabel2.setText(SimpleDate.format(new Date()));
        jLabel3.setText(SimpleTime.format(new Date()));
    }
});
SimpleTimer.start();

然后将其添加到您的主类中,并使用计时器更新jlabel1 / 2/3。

答案 1 :(得分:5)

查看swing timer class。它允许很容易地设置重复任务。

答案 2 :(得分:3)

new Thread(new Runnable
{
    public void run()
    {
        long start = System.currentTimeMillis();
        while (true)
        {
            long time = System.currentTimeMillis() - start;
            int seconds = time / 1000;
            SwingUtilities.invokeLater(new Runnable() {
                 public void run()
                 {
                       label.setText("Time Passed: " + seconds);
                 }
            });
            try { Thread.sleep(100); } catch(Exception e) {}
        }
    }
}).start();

答案 3 :(得分:0)

在构造函数中使用

ActionListener taskPerformer = new ActionListener(){

             @Override

            public void actionPerformed(ActionEvent evt) {
               jMenu11.setText(CurrentTime());
            }
        };

        Timer t = new Timer(1000, taskPerformer);
        t.start();

这个写出构造函数

public String CurrentTime(){

       Calendar cal = new GregorianCalendar();
       int second = cal.get(Calendar.SECOND);
       int min = cal.get(Calendar.MINUTE);
       int hour = cal.get(Calendar.HOUR);
       String s=(checkTime(hour)+":"+checkTime(min)+":"+checkTime(second));
       jMenu11.setText(s);
       return s;

   }

   public String checkTime(int t){
String time1;
if (t < 10){
    time1 = ("0"+t);
    }
else{
    time1 = (""+t);
    }
return time1;

}