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: