java 写的小时钟


/*java 写的小时钟

Email:shun_shun@21cn.com


三叶

*/


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
public class Watch extends Frame {

/**
* @param args
*/


final int ScreenSize=400;

double h,m,s;
int year,month,day,week;
String str;
Calendar cal;
Font f=new Font("楷体_GB2312",1,30);
Image img=Toolkit.getDefaultToolkit().getImage("b.gif");
Image offScreenImage=null;
final double corner=Math.PI/30;
//g.fillOval(15, 40, ScreenSize-20, ScreenSize-20);
final int centerx=15+(ScreenSize-20)/2;
final int centery=40+(ScreenSize-20)/2;

final int hlength=100,mlength=125,slength=140;

public void setFrame(){

this.addWindowListener(new WindowAdapter(){

@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}


});

this.setSize(ScreenSize+10,ScreenSize+40);
this.setLocation(200, 200);
this.setResizable(false);
this.setTitle("钟表");
this.setVisible(true);


Thread t=new Thread(new SetDate());
t.start();


}

public void paint(Graphics g){

Color c=g.getColor();
Font fb=g.getFont();
h=cal.get(Calendar.HOUR);
m=cal.get(Calendar.MINUTE);
s=cal.get(Calendar.SECOND);



year=cal.get(Calendar.YEAR);
month=cal.get(Calendar.MONTH)+1;
day=cal.get(Calendar.DAY_OF_MONTH);
week=cal.get(Calendar.DAY_OF_WEEK);

g.drawString(year+"-"+month+"-"+day+" "+week, 100, 100);

g.setFont(f);

str=Double.valueOf(h).intValue()+" : "+Double.valueOf(m).intValue()+" : "+Double.valueOf(s).intValue();

g.setFont(fb);

g.fillOval(5,30, ScreenSize, ScreenSize);

g.setColor(Color.white);
g.fillOval(15, 40, ScreenSize-20, ScreenSize-20);
g.setColor(c);
g.setFont(f);


g.setFont(fb);
g.setColor(Color.red);
g.drawString(str, 10, 50);
g.setColor(c);



int x1,y1;
int j=0;
g.setFont(f);
for(int i=0;i<60;){

x1=centerx+Double.valueOf(175*Math.sin(i*corner)).intValue()-12;
y1=centery-Double.valueOf(175*Math.cos(i*corner)).intValue()+10;
if(j!=0)g.drawString(String.valueOf(j), x1, y1);else{g.drawString("12", x1, y1);}
j++;
i+=5;

}
g.setFont(fb);
for(int i=0;i<60;i++){
x1=centerx+Double.valueOf(155*Math.sin(i*corner)).intValue();
y1=centery-Double.valueOf(155*Math.cos(i*corner)).intValue();
if(i%5!=0)g.fillOval(x1, y1, 5, 5);
else{
g.setColor(Color.red);
g.fillOval(x1-1, y1-1, 8, 8);
g.setColor(c);
};
}

Graphics2D g2d=(Graphics2D)g;
BasicStroke bs=(BasicStroke)g2d.getStroke();


g2d.setStroke(new BasicStroke(2.0f));
x1=centerx+Double.valueOf(slength*Math.sin(s*corner)).intValue();
y1=centery-Double.valueOf(slength*Math.cos(s*corner)).intValue();
g.drawLine(x1, y1, centerx, centery);

g2d.setStroke(new BasicStroke(4.0f));
x1=centerx+Double.valueOf(mlength*Math.sin((m+s/60)*corner)).intValue();
y1=centery-Double.valueOf(mlength*Math.cos((m+s/60)*corner)).intValue();
g.drawLine(x1, y1, centerx, centery);

g2d.setStroke(new BasicStroke(8.0f));
x1=centerx+Double.valueOf(hlength*Math.sin(5*(h+m/60)*corner)).intValue();
y1=centery-Double.valueOf(hlength*Math.cos(5*(h+m/60)*corner)).intValue();
g.drawLine(x1, y1, centerx, centery);

g2d.setStroke(bs);



g.setColor(Color.black);
g.fillOval(centerx-6, centery-6, 12, 12);
g.setColor(Color.red);
g.fillOval(centerx-2, centery-2, 4, 4);
g.setColor(c);
g.setFont(new Font("楷体_GB2312",1,20));
g.drawString(year+"年"+month+"月"+day+"日", 135, 300);
g.drawString("星期"+week, 170, 330);
g.setFont(fb);
//g.drawLine(15+(ScreenSize-20)/2, 0, 15+(ScreenSize-20)/2, this.getHeight());
//g.drawLine(0, 40+(ScreenSize-20)/2, this.getWidth(), 40+(ScreenSize-20)/2);

}


public void paintfinger(int s,Graphics g){

int x1=centerx+Double.valueOf(slength*Math.sin(s*corner)).intValue();
int y1=centery-Double.valueOf(slength*Math.cos(s*corner)).intValue();
g.drawLine(x1, y1, centerx, centery);


}

public void update(Graphics g){
if(offScreenImage==null){

offScreenImage=this.createImage(ScreenSize+40,ScreenSize+40);
}


Graphics goffScreenImage=offScreenImage.getGraphics();

Color c=g.getColor();
goffScreenImage.setColor(Color.green);
goffScreenImage.fillRect(0, 0, 500,500);
goffScreenImage.setColor(c);
this.paint(goffScreenImage);
g.drawImage( offScreenImage,0,0, null);




}


public static void main(String[] args) {

Watch f=new Watch();
f.setFrame();



}

class SetDate implements Runnable{




public void run() {
while(true) {
repaint();
cal=Calendar.getInstance();

try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

}
}

}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值