Niral Mehta
Niral Mehta

Reputation: 63

Java timer, update every second

I want to grab the current date and time from the system which i can do with this code:

    private void GetCurrentDateTimeActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date date = new Date();
    CurrentDateTime.setText(dateandtime.format(date));
}                                                  

Doing this is fine as it will grab he current date nad time no problem, however it is not dynamic as the time will not update unless the button is pressed again. So I was wondering how I could make this button more dynamic by updating the function every second to refresh the time.

Upvotes: 2

Views: 7936

Answers (4)

MK Aftab
MK Aftab

Reputation: 39

First define a TimerTask

class MyTimerTask extends TimerTask  {
    JLabel currentDateTime;

     public MyTimerTask(JLabel aLabel) {
         this.currentDateTime = aLabel;
     }

     @Override
     public void run() {
         SwingUtilities.invokeLater(
                 new Runnable() {

                    public void run() {
                        // You can do anything you want with 'aLabel'
                         DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                         Date date = new Date();
                         currentDateTime.setText(dateandtime.format(date));

                    }
                });
     }
}

Then, you need to create a java.util.Timer in startup of your application or UI. For example your main() method.

...

Timer timer = new Timer();
timer.schedule(new MyTimerTask(label), 0, 1000);

...

Upvotes: 1

afzalex
afzalex

Reputation: 8652

Use Swing Timer for this :

DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Timer t = new Timer(500, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        Date date = new Date();
        CurrentDateTime.setText(dateandtime.format(date));
        repaint();
    }
});
t.start();

Upvotes: 1

Sagar Pudi
Sagar Pudi

Reputation: 4814

A Swing timer (an instance of javax.swing.Timer) fires one or more action events after a specified delay. Refer: http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
This answer might be useful for you

Upvotes: 0

Pablo Santa Cruz
Pablo Santa Cruz

Reputation: 181290

You can use an executor to update that periodically. Something like this:

ScheduledExecutorService e= Executors.newSingleThreadScheduledExecutor();
e.scheduleAtFixedRate(new Runnable() {
  @Override
  public void run() {
    // do stuff
    SwingUtilities.invokeLater(new Runnable() {
       // of course, you could improve this by moving dateformat variable elsewhere
       DateFormat dateandtime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
       Date date = new Date();
       CurrentDateTime.setText(dateandtime.format(date));
    });
  }
}, 0, 1, TimeUnit.SECONDS);

Upvotes: 4

Related Questions