用java畫的動態時鐘

在這裏插入圖片描述

package shiyan2;
import java.applet.Applet;
import java.awt.Graphics;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Clock extends Applet{
	public void init(){
		//定時器
		Timer timer=new Timer();
		//開個線程任務
		TimerTask task=new TimerTask(){
				
			@Override
			public void run() {
				//自動執行paint函數
				repaint();
				
			}
			
		};
		//定時器執行線程任務
		timer.schedule(task,0,1000);
	};
	//窗體移動重複執行
	public void paint(Graphics g){
		
		g.drawOval(200, 200, 300, 300);
		int cx=200+300/2;
		int cy=200+300/2;
		
		Date now =new Date();
		int hour = now.getHours();
		int second=now.getSeconds();
		int minute=now.getMinutes();
		//數字
		g.drawString(hour+":"+minute+":"+second, 330, 600);
		g.drawString("12", 200+300/2-10, 220);
		g.drawString("3", 500-20, 200+300/2);
		g.drawString("6", 200+300/2, 500-20);
		g.drawString("9", 200+20, 200+300/2);
		

		//畫線
		drawLine(g,cx,cy,hour,minute,second,150);
		
		//畫刻度
		drawKedu(g,cx,cy,150);

	};

	public void drawKedu(Graphics g,int cx,int cy,int r){
		//畫大刻度,相差30度
		for(int i=1;i<=12;i++)
		{
			double dz= Math.toRadians(30*i-90);
			//得到大刻度兩個端點的座標
			int x2=cx+(int)(r*Math.sin(dz));
			int y2=cx+(int)(r*Math.cos(dz));
			
			int x1=cx+(int)((r-10)*Math.sin(dz));
			int y1=cx+(int)((r-10)*Math.cos(dz));
			
			g.drawLine(x1, y1, x2, y2);
				
		}
		//畫小刻度,相差6度
		for(int i=1;i<=60;i++)
		{
			double dz= Math.toRadians(6*i-90);
			//得到小刻度兩個端點的座標
			int x2=cx+(int)(r*Math.sin(dz));
			int y2=cx+(int)(r*Math.cos(dz));
			
			int x1=cx+(int)((r-5)*Math.sin(dz));
			int y1=cx+(int)((r-5)*Math.cos(dz));
			
			g.drawLine(x1, y1, x2, y2);
				
		}
		
	}
	
	public void drawLine(Graphics g,int cx,int cy,int hour,int minute,int second,int r) {
		if(hour<=12)
		{
			hour=hour*2;
		}
		//得到弧度
		double sz = Math.toRadians((hour/24.0)*360-90);
		double fz = Math.toRadians((minute/60.0)*360-90);
		double mz = Math.toRadians((second/60.0)*360-90);
		//得到時針座標
		int sx=cx+(int)((r-120)*Math.cos(sz));
		int sy=cy+(int)((r-120)*Math.sin(sz));
		
		//得到分針座標
		int fx=cx+(int)((r-60)*Math.cos(fz));
		int fy=cy+(int)((r-60)*Math.sin(fz));
		
		//得到秒針座標
		int mx=cx+(int)((r-30)*Math.cos(mz));
		int my=cy+(int)((r-30)*Math.sin(mz));
		
		//畫線
		g.drawLine(cx, cy, sx, sy);
		g.drawLine(cx, cy, fx, fy);
		g.drawLine(cx, cy, mx, my);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章