There are many drawbacks, such as not a time trigger but a thread hang
package com.zhou.clock;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import Java.lang.Math;
import java.util.Date;
public class Clock extends JFrame {
Clockpane CP;
public Clock () {
super ("clock");
setdefaultcloseoperation (exit_on_close);
cp=new Clockpane ();
Cp.inittime ();
//container Content=getcontentpane ();
//content.add (CP);
Setcontentpane (CP);//This sentence can be replaced by the above two sentences
setbounds (400,400,200,220);
setresizable (FALSE);
setvisible (TRUE);
}
public void interval () {
while (true) {
try{thread.sleep (1000);}
catch (Exception e) {
}
Cp.drawclock (Cp.getgraphics ());
}
}
public static void Main (string[] args) {
Clock clock=new Clock ();
Clock.interval ();
}
class Clockpane extends jpanel{
double Secondradian;
double Minuteradian;
double Hourradian;
public void Paintcompnent (Graphics comp) {
Drawclock (comp);
}
public void Inittime () {
Date D=new date ();
int hours=d.gethours ();
int minutes=d.getminutes ();
int seconds=d.getseconds ();
HOURRADIAN=HOURS*MATH.PI/6 + ((float) minutes/60) *MATH.PI/6;
Minuteradian=minutes*math.pi/30;
Secondradian=seconds*math.pi/30;
}
public void Drawclock (Graphics comp) {
graphics2d comp2d= (graphics2d) comp;
Comp2d.setcolor (Color.gray);
basicstroke pen=new Basicstroke (10f,basicstroke.cap_butt,basicstroke.join_round);
Comp2d.setstroke (pen);
arc2d.float circle=new arc2d.float (20f,20f,150f,150f,0f,360f,arc2d.open);
Comp2d.draw (circle);
Comp2d.setcolor (Color.White);
Comp2d.fill (circle);
pen=new Basicstroke (1f,basicstroke.cap_butt,basicstroke.join_round);
Comp2d.setstroke (pen);
Comp2d.setcolor (Color.cyan);
circle=new arc2d.float (20.5f,20.5f,149f,149f,0f,360f,arc2d.open);
Comp2d.draw (circle);
Comp2d.setcolor (Color.Black);
pen=new Basicstroke (8f,basicstroke.cap_butt,basicstroke.join_round);
Comp2d.setstroke (pen);
pin stake=new pin (95.0,95.0,75.0);
double stakeradian=0;
for (int i=0;i<12;i++) {
Comp2d.draw (Stake.createstake (Stakeradian));
STAKERADIAN+=MATH.PI/6;
}
pen=new Basicstroke (2f,basicstroke.cap_butt,basicstroke.join_round);
Comp2d.setstroke (pen);
Comp2d.setcolor (Color.cyan);
for (int i=0;i<12;i++) {
Comp2d.draw (Stake.createstake (Stakeradian));
STAKERADIAN+=MATH.PI/6;
}
Comp2d.setcolor (Color.dark_gray);
pin Secondpin =new pin (95.0,95.0,65.0);
pin Minutepin =new pin (95.0,95.0,50.0);
pin Hourpin =new pin (95.0,95.0,40.0);
pen =new basicstroke (2f,basicstroke.cap_butt,basicstroke.join_round);
basicstroke pen1=new Basicstroke (3f,basicstroke.cap_butt,basicstroke.join_round);
basicstroke pen2=new Basicstroke (4f,basicstroke.cap_butt,basicstroke.join_round);
Inittime ();
Comp2d.setstroke (pen);
Comp2d.draw (Secondpin.createpin (Secondradian));
Comp2d.setstroke (PEN1);
Comp2d.draw (Minutepin.createpin (Minuteradian));
Comp2d.setstroke (PEN2);
Comp2d.draw (Hourpin.createpin (Hourradian));
}
}
}
package com.zhou.clock;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import Java.lang.Math;
public class pin{
double Constantx;
double constanty;
double length;
public Pin (double inputx, double inputy, double inputlength) {
Constantx=inputx;
constanty=inputy;
length =inputlength;
}
public line2d.double Createpin (Double radian) {
double Variablex;
double Variabley;
Variablex=constantx+length*math.sin (Radian);
Variabley=constanty-length*math.cos (Radian);
line2d.double ln=new line2d.double (Constantx,constanty,variablex,variabley);
return LN;
}
public line2d.double Createstake (Double radian) {
double Innerx;
double innery;
double Outerx;
double outery;
innerx=constantx+ (length-15) *math.sin (radian);
innery=constanty-(length-15) *math.cos (radian);
Outerx=constantx+length*math.sin (Radian);
Outery=constanty-length*math.cos (Radian);
line2d.double ln=new line2d.double (innerx,innery,outerx,outery);
return LN;
}
}