java模拟时钟(一个庞大的问题)
											 程序代码:
程序代码:import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class Clock extends JComponent implements Runnable{
    Thread thread;
    
    Calendar currentTime;//当前时间
    int hours = 0;
    int minutes = 0;
    int seconds = 0;
    
    public Clock() {
        setBounds(0,0,300,400);
        setBackground(Color.PINK);
        
        
        thread = new Thread();
        thread.start();
    }
    
    
    public void PaintClock(Graphics g) {
        g.setColor(Color.black);//设置黑色来画时钟
        drawHourAndMinutePointer(2*Math.PI*hours/12,30,g);//画时针
        drawHourAndMinutePointer(2*Math.PI*minutes/60,40,g);//画分针
        drawSecondPointer(2*Math.PI*seconds/12,50,g);//画秒针
        drawNumber(g);
        g.drawOval(0, 50, 150, 150);//画左边圆
    }
    
    void drawSecondPointer(double angle, int radius, Graphics g) {
        angle -= 0.5*Math.PI;//减去90度,因坐标与时钟差90度
        int x = (int)(radius*Math.cos(angle));//计算针头的X坐标
        int y = (int)(radius*Math.sin(angle));//计算针头的Y坐标
        g.drawLine(75, 200, 75+x, 200+y);//画秒针
    }
    void drawHourAndMinutePointer(double angle, int radius, Graphics g) {
        angle -= 0.5*Math.PI;//减去90度,因坐标与时钟差90度
        int x = (int)(radius*Math.cos(angle));//计算针头的X坐标
        int y = (int)(radius*Math.sin(angle));//计算针头的Y坐标
        angle += 2*Math.PI/3;//将angle调整为第一针尾的角度
        int x2 = (int)(5*Math.cos(angle));//计算第一针尾点的X坐标
        int y2 = (int)(5*Math.sin(angle));//计算第一针尾点的Y坐标
        angle += 2*Math.PI/3;//将angle调整为第二针尾的角度
        int x3 = (int)(5*Math.cos(angle));//计算第二针尾点的X坐标
        int y3 = (int)(5*Math.sin(angle));//计算第二针尾点的Y坐标
        g.drawLine(75+x2, 200+y2, 75+x, 200+y);//画左翼
        g.drawLine(75+x3, 200+y3, 75+x, 200+y);//画右翼
        g.drawLine(75+x2, 200+y2, 75+x3, 200+y3);//画针尾
    }
    void drawNumber(Graphics g) {
        for(int i = 1; i <= 12; i++) {
            drawnumber(g,(float) (Math.PI / 6)*i,i);
        }
    }
    void drawnumber(Graphics g,double angle,int num) {
            float sine = (float) Math.sin(angle);
            float cosine = (float) Math.cos(angle);
            int x = (int) (40 * sine);
            int y = (int) (40 * cosine);
            g.drawString("" + num, x + 75, 200 - y);
    }
    
    public void run() {
        currentTime = Calendar.getInstance();
        hours = currentTime.get(Calendar.HOUR);
        minutes = currentTime.get(Calendar.MINUTE);
        seconds = currentTime.get(Calendar.SECOND);
        repaint();
        }
}
 
											





 
	     
											


 
										
					
	
