Create a Digital Clock in Java

In this tutorial, we'll learn how to create a digital clock in Java that looks like the one below:

Create digital clock in Java

To create GUI based applications, Java provides Swing framework which is a graphical user interface framework that includes a set of classes that are powerful and flexible.

To create a digital clock, we will use JFrame, JLabel, and Timer class from the Swing framework. The JFrame class is used to construct a top-level window for a Java application. The JLabel class is used to display a string and the Timer class is used to fire events at specified intervals.

The following code creates and displays a digital clock in Java:


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.Timer;

public class DigitalClock {

	static void display() {
		// create window for clock
		JFrame clockFrame = new JFrame("Digital Clock");
		clockFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// create label to print time
		JLabel timeLabel = new JLabel("", SwingConstants.CENTER);
		timeLabel.setPreferredSize(new Dimension(400, 100));
		timeLabel.setFont(new Font("Calibri", Font.BOLD, 50));
		clockFrame.getContentPane().add(timeLabel, BorderLayout.CENTER);

		//call pack() before setLocationRelativeTo ()
		//pack() determines the size of the window for centering the window
		clockFrame.pack();
		clockFrame.setLocationRelativeTo(null);
		// Display the window
		clockFrame.setVisible(true);

		int delay = 100;
		Timer timer = new Timer(delay, new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				LocalDateTime now = LocalDateTime.now();
				DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
				String formattedDateTime = now.format(formatter);
				timeLabel.setText(formattedDateTime);
			}
		});

		timer.start();
    }

	public static void main(String args[]) {
		display();
	}
}