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




