简体   繁体   中英

how to put a timer on a JLabel to update itself every second

I created a game and in my swing GUI interface I want to put a timer. The way I do this at the moment is have a field with the current time, gotten with System.currentTimeMillis() which gets it's value when the game starts.In the method of my game i put the System.currentTimeMillis() - field; and it tells you the current time passed since the game started.

Nevertheless, how do get this to update itself every second lets say, so the JLabel will have: timePassed: 0s, timePassed: 1s and so on. Have in mind that i don't use threads in my game at any point.

EDIT: thank you all for your kind suggestions. I used a combination of your answers please give me some feedback.

I have the JLabel as a field called time. (else i cant handle it).

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();

Have a look at the swing timer class . It allows to setup recurring tasks quite easily.

This is how I would set my JLabel to update with time & date.

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();

This is then added to your main class and the jlabel1/2/3 get updated with the timer.

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();

wirite this in Constructor

ActionListener taskPerformer = new ActionListener() {

             @Override

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

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

And this Write out Constructor

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;

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM