Java implementation clock

Keywords: Java

               

I. core expression

It is very important to confirm the angle of the three pointers because the position of hour pointer, minute pointer and second pointer need to be displayed dynamically

X: X coordinate of the origin where the three pointers intersect;

Y: Y coordinate of the origin where the three pointers intersect;

Hour? Length, minute? Length and second? Length indicate the length of the hour hand, minute hand and second hand;

hour, minute, and second indicate when, how many minutes, and how many seconds it is now

hourLine.x2 = X+HOUR_LENGTH*Math.cos(hour*(Math.PI/6)-Math.PI/2);
hourLine.y2 = Y+HOUR_LENGTH*Math.sin(hour*(Math.PI/6)-Math.PI/2);
minLine.x2 = X+MINUTE_LENGTH*Math.cos(minute*(Math.PI/30)-Math.PI/2);
minLine.y2 = Y+MINUTE_LENGTH*Math.sin(minute*(Math.PI/30)-Math.PI/2);
secondLine.x2 = X+SECOND_LENGTH*Math.cos(second*(Math.PI/30)-Math.PI/2);
secondLine.y2 = Y+SECOND_LENGTH*Math.sin(second*(Math.PI/30)-Math.PI/2);

How to display dynamically

In short, the screen is updated every second, so the Timer and TimerTask meet the requirements very well;

Three, code

package org.Demo00;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.geom.Ellipse2D;import java.awt.geom.Line2D;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JPanel;public class Test5 extends JFrame { MyPanel clockPanel; Ellipse2D.Double e; int x; int y; Line2D.Double hourLine; Line2D.Double minLine; Line2D.Double secondLine; GregorianCalendar calendar; int hour; int minute; int second; public static final int X = 60public static final int Y = 60public static final int X_BEGIN = 10public static final int Y_BEGIN = 10public static final int RADIAN = 50public Test5() {  setSize(300, 400);  clockPanel = new MyPanel();  add(clockPanel);  Timer t = new Timer();  Task task = new Task();  t.schedule(task, 0, 1000); } public static void main(String[] args) {  Test5 t = new Test5();  t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  t.setVisible(true); } class MyPanel extends JPanel {  public MyPanel() {   e = new Ellipse2D.Double(X_BEGIN, Y_BEGIN, 100, 100);   hourLine = new Line2D.Double(X, Y, X, Y);   minLine = new Line2D.Double(X, Y, X, Y);   secondLine = new Line2D.Double(X, Y, X, Y);  }  public void paintComponent(Graphics g) {   super.paintComponent(g);   Graphics2D g2 = (Graphics2D) g;   g2.drawString("12", 55, 25);   g2.drawString("6", 55, 105);   g2.drawString("9", 15, 65);   g2.drawString("3", 100, 65);   g2.draw(e);   g2.draw(hourLine);   g2.draw(minLine);   g2.draw(secondLine);  } } class Task extends TimerTask {  public void run() {   calendar = new GregorianCalendar();   hour = calendar.get(Calendar.HOUR);   minute = calendar.get(Calendar.MINUTE);   second = calendar.get(Calendar.SECOND);   hourLine.x2 = X + 40 * Math.cos(hour * (Math.PI / 6) - Math.PI / 2);   hourLine.y2 = Y + 40 * Math.sin(hour * (Math.PI / 6) - Math.PI / 2);   minLine.x2 = X + 45     * Math.cos(minute * (Math.PI / 30) - Math.PI / 2);   minLine.y2 = Y + 45     * Math.sin(minute * (Math.PI / 30) - Math.PI / 2);   secondLine.x2 = X + 50     * Math.cos(second * (Math.PI / 30) - Math.PI / 2);   secondLine.y2 = Y + 50     * Math.sin(second * (Math.PI / 30) - Math.PI / 2);   repaint();  } }}


 

 

           

Posted by Bac on Sat, 23 Nov 2019 08:20:25 -0800