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 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);    }} |

