Java Applet | How to display an Analog Clock

In this article, we shall be animating the applet window to show an Analog Clock with a 1-second delay. The idea is to display the system time of every instance.
Approach:
Each hand of the clock will be animating with 1-second delay keeping one end at the centre. The position of the other end can be derived by the system time. The angle formed by a hand of the clock in every second will be different throughout its journey. This is why various instances make a different angle to the horizontal line.
How to run:
1. Save the file as analogClock.java and run the following commands. 2. javac analogClock.java 3. appletviewer analogClock.java
Below is the implementation of the above approach:
Program:
// Java program to illustrate// analog clock using Applets import java.applet.Applet;import java.awt.*;import java.util.*; public class analogClock extends Applet { @Override public void init() { // Applet window size & color this.setSize(new Dimension(800, 400)); setBackground(new Color(50, 50, 50)); new Thread() { @Override public void run() { while (true) { repaint(); delayAnimation(); } } }.start(); } // Animating the applet private void delayAnimation() { try { // Animation delay is 1000 milliseconds Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } // Paint the applet @Override public void paint(Graphics g) { // Get the system time Calendar time = Calendar.getInstance(); int hour = time.get(Calendar.HOUR_OF_DAY); int minute = time.get(Calendar.MINUTE); int second = time.get(Calendar.SECOND); // 12 hour format if (hour > 12) { hour -= 12; } // Draw clock body center at (400, 200) g.setColor(Color.white); g.fillOval(300, 100, 200, 200); // Labeling g.setColor(Color.black); g.drawString("12", 390, 120); g.drawString("9", 310, 200); g.drawString("6", 400, 290); g.drawString("3", 480, 200); // Declaring variables to be used double angle; int x, y; // Second hand's angle in Radian angle = Math.toRadians((15 - second) * 6); // Position of the second hand // with length 100 unit x = (int)(Math.cos(angle) * 100); y = (int)(Math.sin(angle) * 100); // Red color second hand g.setColor(Color.red); g.drawLine(400, 200, 400 + x, 200 - y); // Minute hand's angle in Radian angle = Math.toRadians((15 - minute) * 6); // Position of the minute hand // with length 80 unit x = (int)(Math.cos(angle) * 80); y = (int)(Math.sin(angle) * 80); // blue color Minute hand g.setColor(Color.blue); g.drawLine(400, 200, 400 + x, 200 - y); // Hour hand's angle in Radian angle = Math.toRadians((15 - (hour * 5)) * 6); // Position of the hour hand // with length 50 unit x = (int)(Math.cos(angle) * 50); y = (int)(Math.sin(angle) * 50); // Black color hour hand g.setColor(Color.black); g.drawLine(400, 200, 400 + x, 200 - y); }} |
Output:




