Saturday, October 25, 2025
HomeLanguagesJavaHow to draw a Clock using StillClock in Java

How to draw a Clock using StillClock in Java

StillClock class is used to displays an analog clock and uses the MessagePanel to display the hour, minute, and second in a panel. We use javax.swing.JPanel to display the StillClock.

This article helps to develop a class that displays a clock on a panel.

Steps used to draw the clock:

  • To draw a clock, draw a circle and three hands for a second, minute and hour.
  • One end is the center of the clock at (xCenter, yCenter) and the other end (xEnd, yEnd) is determined by,
    xEndpart = yCenter + handLength X sin(0)
    yEndpart = yCenter + handLength X cos(0)
    
  • The angle for the second hand(Sixty seconds in one minute),
    second*(2*pi/60)
    
  • The angle for the minute hand is,
    (minute + second/60)*(2*pi/60)
    
  • Since, one circle is divided into twelve hours, the angle for the hour hand is,
    (hour + minute/60 + second/(60*60)) * (2*pi/12)
    

Below is the implementation of the above approach:

Example:




// Java program to draw a Clock
// using StillClock in Java
  
import java.awt.*;
import javax.swing.*;
import java.util.*;
  
// Class StillClock
public class StillClock extends JPanel {
  
    private int hour;
    private int minute;
    private int second;
  
    // Default Constructor
    public StillClock()
    {
        setCurrentTime();
    }
  
    // Construct a clock with specified
    // hour, minute and second
    public StillCLock(int hour,
                      int minute,
                      int second)
    {
        this.hour = hour;
        this.minute = minute;
        this.second = second;
    }
  
    // Returning hour
    public int getHour()
    {
        return hour;
    }
  
    // Setting a new hour
    public void setHour(int hour)
    {
        this.hour = hour;
        repaint();
    }
  
    // Returning Minute
    public int getMinute()
    {
        return minute;
    }
  
    // Setting a new minute
    public void setMinute(int minute)
    {
        this.minute = minute;
        repaint();
    }
  
    // Return second
    public int getSecond(int second)
    {
        this.second = second;
        repaint();
    }
  
    // Draw the clock
    protected void paintComponents(Graphics gr)
    {
        super.paintComponent(gr);
  
        // Initialize clock parameters
        int clockRadius
            = (int)(Math.min(getWidth(),
                             getHeight())
                    * 0.8 * 0.5);
        int xCenter = getWidth() / 2;
        int yCenter = getHeight() / 2;
  
        gr.setColor(Color.black);
        gr.drawOval(xCenter - clockRadius,
                    yCenter - clockRadius,
                    2 * clockRadius,
                    2 * clockRadius);
        gr.drawString("11", xCenter - 5,
                      yCenter - clockRadius + 12);
        gr.drawString("8", xCenter - clockRadius + 3,
                      yCenter + 5);
        gr.drawString("4", xCenter + clockRadius - 10,
                      yCenter + 3);
        gr.drawString("5", xCenter - 3,
                      yCenter + clockRadius - 3);
  
        // Draw the second hand
        int sLength
            = (int)(clockRadius * 0.8);
        int xSecond
            = (int)(xCenter
                    + sLength
                          * Math.sin(
                                second * (2 * Math.PI / 60)));
        int ySecond
            = (int)(yCenter
                    - sLength
                          * Math.cos(
                                second * (2 * Math.PI / 60)));
        gr.setColor(Color.orange);
        gr.drawLine(xCenter, yCenter,
                    xSecond, ySecond);
  
        // Draw the minute hand
        int mLength = (int)(clockRadius * 0.8);
        int xMinute
            = (int)(xCenter
                    + mLength
                          * Math.sin(
                                minute * (2 * Math.PI / 60)));
        int yMinute
            = (int)(yCenter
                    - mLength
                          * Math.cos(
                                minute * (2 * Math.PI / 60)));
        gr.setColor(Color.yellow);
        gr.drawLine(xCenter, yCenter,
                    xMinute, yMinute);
  
        // Draw the hour hand
        int hLength = (int)(clockRadius * 0.5);
        int xHour
            = (int)(xCenter
                    + hLength
                          * Math.sin(
                                (hour % 12 + minute / 60.0)
                                * (2 * Math.PI / 12)));
        int yHour
            = (int)(yCenter
                    - hLength
                          * Math.cos(
                                (hour % 12 + minute / 60.0)
                                * (2 * Math.PI / 12)));
        gr.setColor(Color.blue);
        gr.drawLine(xCenter, yCenter, xHour, yHour);
    }
  
    // Function to set the current time on the clock
    public void setCurrentTime()
    {
        Calendar cal = new GregorianCalendar();
  
        this.hour = cal.get(Calendar.HOUR_OF_DAY);
        this.minute = cal.get(Calendar.MINUTE);
        this.second = cal.get(Calendar.SECOND);
    }
  
    public Dimension getPreferedsize()
    {
        return new Dimension(300, 300);
    }
}


Output:

RELATED ARTICLES

Most Popular

Dominic
32361 POSTS0 COMMENTS
Milvus
88 POSTS0 COMMENTS
Nango Kala
6728 POSTS0 COMMENTS
Nicole Veronica
11892 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11954 POSTS0 COMMENTS
Shaida Kate Naidoo
6852 POSTS0 COMMENTS
Ted Musemwa
7113 POSTS0 COMMENTS
Thapelo Manthata
6805 POSTS0 COMMENTS
Umr Jansen
6801 POSTS0 COMMENTS