package com.jp.lianxi3; import java.awt.Color; import java.awt.Graphics; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JPanel; public class DrawClock extends JPanel{ private int localX=150; private int localY=150; private int r=150; public DrawClock(int r){ this.localX=this.localY=this.r=r; } public DrawClock(){} public void paintComponent(Graphics g){ super.paintComponent(g); g.translate(250, 250); drawO(g); drawHand(g); } public void drawO(Graphics g){//画表盘 g.drawOval(-localX, -localY, r*2, r*2); int a=0; for(int i=0;i<60;i++){ double x,y; x=Math.cos(Math.toRadians(a)); y=Math.sin(Math.toRadians(a)); if(a%30==0) g.drawLine((int)(0.8*x*r), (int)(0.8*y*r), (int)(x*r), (int)(y*r)); else g.drawLine((int)(0.9*x*r), (int)(0.9*y*r), (int)(x*r), (int)(y*r)); a+=6; } } public void drawHand(Graphics g){//画表针 Date date=new Date(); int hour,minute,second; hour=minute=second=90; //确定各个针的角度 hour-=date.getHours()*30; minute-=date.getMinutes()*6; second-=date.getSeconds()*6; g.setColor(Color.RED); double x,y; x=Math.cos(Math.toRadians(hour)); y=Math.sin(Math.toRadians(hour)); g.drawLine(0,0,(int)(0.5*r*x),-(int)(0.5*r*y));//画时针 x=Math.cos(Math.toRadians(minute)); y=Math.sin(Math.toRadians(minute)); g.drawLine(0,0,(int)(0.6*r*x),-(int)(0.6*r*y));//分针 x=Math.cos(Math.toRadians(second)); y=Math.sin(Math.toRadians(second)); g.drawLine(0,0,(int)(0.8*r*x),-(int)(0.8*r*y));//画秒针 g.drawString(date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(), 20, 10); } public void go(){ Timer t=new Timer(); t.schedule(new MyTimerTask(), 0, 1000);//定义定时器每一秒刷一次 } class MyTimerTask extends TimerTask{ @Override public void run() { repaint(); } } public static void main(String[] args) { DrawClock dc=new DrawClock(150); JFrame f=new JFrame("时钟"); f.add(dc); f.setSize(500,500); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); f.setVisible(true); dc.go(); } }