java 简单时钟

学习java的路上大家写的博客无偿的给了我很大的帮助,我很感动,结合课本,我用java绘图做了一个简单的时钟,供初学者参考,注释很少,有问题直接问我,有时间一定回复。

package Mytest;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RadialGradientPaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.xml.parsers.DocumentBuilder;

public class lab1 extends JFrame implements ActionListener {
	int x0,y0,r,h,angle,x,y,hour,minute,second,hours,xs,xy,oldxs=0,oldxy=0,xm,ym,oldxm=0,oldym=0,xh,yh,oldxh=0,oldyh=0;
	double angles,anglem,angleh;
	final double RAD = Math.PI/180;
	public void sx(){
		//public DrawClock drawClock;
		this.repaint();
		
		
	}

	
	public lab1(){		
		this.setTitle("GD Time");
		this.setSize(300,300);
		this.setLocation(200,200);
		this.setDefaultCloseOperation(3);
		this.setResizable(false);
		this.setVisible(true);
		
		int delay = 1000;

		Timer timer = new Timer();
		timer.schedule(new DrawClock(), 0,delay);
		
	}
class DrawClock extends TimerTask{

	@Override
	public void run() {
		// TODO 自动生成的方法存根
		repaint();
	}
	
}
	
	public void paint(Graphics myg){
		
		Graphics2D myg2D = (Graphics2D)myg;
		x0=150;y0=161;r=110;h=300;angle=60;
//		Insets insets = getInsets();
//		int lift = insets.left/2;
//		int right = insets.right;
//		int top = insets.top/2;
//		int height = getSize().height;
//		System.out.println("lift is : "+lift);
//		System.out.println("right is : "+right);
//		System.out.println("top is : "+top);
//		System.out.println("height is : "+height);
		
		myg2D.setStroke(new BasicStroke(2.0f));
		myg.drawOval(40,51, 2*r,2*r);
		
		for(int i =1;i<=12;i++){
			x=(int)((r+12)*Math.cos(RAD*angle)+x0);
			y=(int)((r+12)*Math.sin(RAD*angle)+y0);
			myg.drawString(""+i, x-3, h-y+26);
			angle-=30;
		}
	
		GregorianCalendar calendar = new GregorianCalendar();
	
		 hour = calendar.get(calendar.HOUR);
		 hours = calendar.get(calendar.HOUR_OF_DAY);
		 minute = calendar.get(calendar.MINUTE);
		 second = calendar.get(calendar.SECOND);
		 System.out.println("hour is "+hour);
		 System.out.println("hours is"+hours);
		String sT;
		if(hours<10){
			sT = "0"+hours;
		}
		else{
			sT = ""+hours;
		}
		if(minute<10){
			sT +=":0"+minute;
		}
		else{
			sT +=":"+minute;
		}
		if(second<10){
			sT +=":0"+second;
		}
		else{
			sT +=":"+second;
		}
	   
	    myg.setColor(Color.blue);
	    myg.fillRect(4, 27, 60, 20);
	    myg.setColor(Color.yellow);
	    myg.drawString(sT,8, 40);

	    //擦除秒针
	   
	    if(oldxs!=0&&oldxy!=0){
	    	 myg2D.setStroke(new BasicStroke(1.5f));
	    	myg.setColor(Color.WHITE);
	    	myg.drawLine(x0, y0, oldxs, oldxy);
	    }
	    if(oldxh!=0&&oldyh!=0){
	    	myg2D.setStroke(new BasicStroke(4.2f));
	    	myg.setColor(Color.WHITE);
	    	myg.drawLine(x0, y0, oldxh, oldxh);
	    }
	    if(oldxm!=0&&oldyh!=0){
	    	myg2D.setStroke(new BasicStroke(2.5f));
	    	myg.setColor(Color.WHITE);
	    	myg.drawLine(x0, y0, oldxm, oldym);
	    }
	    
	    //开始绘制时钟
	    myg2D.setStroke(new BasicStroke(1.5f));
	    angles = second*6*RAD;
	    myg.setColor(Color.red);
	    xs=(int)(0.9*r*Math.sin(angles))+150;
	    xy=r-(int)(0.9*r*Math.cos(angles))+51;
	    myg.drawLine(x0, y0, xs, xy);
	    oldxs = xs;
	    oldxy = xy;
	    
	    myg2D.setStroke(new BasicStroke(2.5f));
	    anglem = minute*6*RAD;
	    myg.setColor(Color.black);
	    xm=150+(int)(0.7*r*Math.sin(anglem));
	    ym = 51+r-(int)(0.7*r*Math.cos(anglem));
	    myg.drawLine(x0, y0, xm, ym);
	    oldxm = xm;
	    oldym = ym;
	    
	    myg2D.setStroke(new BasicStroke(4.2f));
	    angleh = hour*30*RAD;
	    myg.setColor(Color.black);
	    xh=150 +(int)(0.5*r*Math.sin(angleh));
	    yh=51+r-(int)(0.5*r*Math.cos(angleh));
	    myg.drawLine(x0, y0, xh, yh);
	    oldxh = xh;
	    oldyh = yh;
	    
		
	}
	public static void main(String[] args){
		new lab1();
		
	}


	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO 自动生成的方法存根
		
	}

}


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值