import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class TimerTest
{
public static void main (String[] args)
{ TimerTestFrame f= new TimerTestFrame("世界时钟");
}
}
class TimerTestFrame extends Frame
{
public TimerTestFrame(String s)
{
super(s);
addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
setLayout(new GridLayout(2,6));
ClockCanvas clk1=new ClockCanvas("北京","GMT+8"); //创建时钟
ClockCanvas clk2=new ClockCanvas("巴黎","GMT+2");
ClockCanvas clk3=new ClockCanvas("华盛顿","GMT-4");
ClockCanvas clk4=new ClockCanvas("洛衫矶","GMT-7");
ClockCanvas clk5=new ClockCanvas("伦敦","GMT+1");
ClockCanvas clk6=new ClockCanvas("芝加哥","GMT-5");
add(clk1);add(clk2);add(clk3);
add(clk4);add(clk5);add(clk6);
setSize(500,350); //设置框架宽高
setVisible(true);
}
}
class ClockCanvas extends Canvas implements Runnable
{
private int seconds=0;
private String city;
private GregorianCalendar calendar;
Thread t;
public ClockCanvas(String c,String tz)
{
city=c;
calendar=new GregorianCalendar(TimeZone.getTimeZone(tz));
t=new Thread(this);
t.start();
setSize(125,125); //设置画布大小
setBackground(Color.black);
}
//重写父类的方法绘制时钟图形
public void paint(Graphics g)
{
Graphics2D g2d=(Graphics2D)g;
BasicStroke bstroke=new BasicStroke(2.0f);
g2d.setStroke(bstroke);
g2d.setColor(Color.green);
g2d.drawOval(0,0,100,100);
bstroke=new BasicStroke(5.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50,0,50,5);
g2d.drawLine(0,50,5,50);
g2d.drawLine(50,95,50,98);
g2d.drawLine(95,50,98,50);
double hourAngle=2*Math.PI*(seconds-3*60*60)/(12*60*60);
double minuteAngle=2*Math.PI*(seconds-15*60)/(60*60);
double secondAngle=2*Math.PI*(seconds-15)/(60);
bstroke=new BasicStroke(5.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50,50,50+(int)(30*Math.cos(hourAngle)),50+(int)(30*Math.sin(hourAngle)));
bstroke=new BasicStroke(3.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50,50,50+(int)(40*Math.cos(minuteAngle)),50+(int)(40*Math.sin(minuteAngle)));
bstroke=new BasicStroke(1.0f);
g2d.setStroke(bstroke);
g2d.drawLine(50,50,50+(int)(45*Math.cos(secondAngle)),50+(int)(45*Math.sin(secondAngle)));
g2d.setColor(Color.red);
g2d.drawString(city,35,115);
}
public void timeElapsed()
{
calendar.setTime(new Date());
seconds=calendar.get(Calendar.HOUR)*60*60
+calendar.get(Calendar.MINUTE)*60
+calendar.get(Calendar.SECOND);
}
public
void run(){
try{
while(true){
t.sleep(300);
timeElapsed();
repaint();
}
}
catch(InterruptedException e){}
}
}