用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);
	}
}
发布了619 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43294560/article/details/105175952