How to draw a Clock using StillClock in Java - GeeksforGeeks

07 Feb, 2020
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)

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)

second*(2*pi/60)

The angle for the minute hand is,(minute + second/60)*(2*pi/60)

(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)

(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 StillClockpublic 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:
java-advanced
java-swing
Java
Technical Scripter
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stream In Java
Constructors in Java
Exceptions in Java
Functional Interfaces in Java
Different ways of Reading a text file in Java
Generics in Java
Introduction to Java
Comparator Interface in Java with Examples
PriorityQueue in Java
Internal Working of HashMap in Java