Topic: 一个钟表的java小程序,不知理解的对不对? |
Print this page |
1.一个钟表的java小程序,不知理解的对不对? | Copy to clipboard |
Posted by: enthusiasm Posted on: 2005-11-18 11:09 import java.util.*; import java.awt.*; import java.applet.*; import java.text.*; public class xor extends Applet implements Runnable { //创建一个线程对象timer。 Thread timer; int lastxs,lastys,lastxm,lastym,lastxh,lastyh; //创建一个日期输出模式类对象formatter SimpleDateFormat formatter; String lastdate; Font clockFaceFont; //创建一个日期类对象currentDate Date currentDate; //创建两个颜色类对象。 Color handColor,numberColor; public void init() { int x,y; lastxs=lastys=lastxm=lastym=lastxh=lastyh=0; //日期时间类对象实例化 formatter=new SimpleDateFormat("yyyy EEE MMM dd hh:mm:ss"); //日期类对象实例化 currentDate=new Date(); //取日期对象,用日期输出模式对象格式化它,放入lastdate字符串内。 lastdate=formatter.format(currentDate); //设置字体对象实例化。 clockFaceFont=new Font("Serif",Font.PLAIN,14); handColor=Color.BLUE; numberColor=Color.DARK_GRAY; try { //Integer.parseInt,将字符串以16进制整数来分析,然后设置为背景颜色。 //setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16))); //直接以十进制数字来设置背景颜色。 setBackground(new Color(123456)); } catch(Exception e) { } try { //同上。 //handColor=new Color(Integer.parseInt(getParameter("fgcolor1"),16)); handColor=new Color(744400); } catch(Exception e) { } try { //同上。 //numberColor=new Color(Integer.parseInt(getParameter("fgcolor2"),16)); numberColor=new Color(478); } catch(Exception e) { } resize(200,200); } //g为制图类对象。 public void plotpoints(int x0,int y0,int x,int y,Graphics g) { //drawLine(int, int, int, int) 在该图形上下文的坐标系中 //绘制一条在点 (x1 , y1) 和 (x2 , y2) 之间的线。 g.drawLine(x0+x,y0+y,x0+x,y0+y); g.drawLine(x0+y,y0+x,x0+y,y0+x); g.drawLine(x0+y,y0-x,x0+y,y0-x); g.drawLine(x0+x,y0-y,x0+x,y0-y); g.drawLine(x0-x,y0-y,x0-x,y0-y); g.drawLine(x0-y,y0-x,x0-y,y0-x); g.drawLine(x0-y,y0+x,x0-y,y0+x); g.drawLine(x0-x,y0+y,x0-x,y0+y); } //利用制图对象g来绘制圆。r为半径。 public void circle(int x0,int y0,int r,Graphics g) { int x,y; float d; x=0; y=r; d=5/4-r; plotpoints(x0,y0,x,y,g); while(y>x) { if(d<0) { d=d+2*x+5; x++; } else { d=d+2*(x-y)+5; x++; y--; } plotpoints(x0,y0,x,y,g); } } //制图对象画出表针 public void paint(Graphics g) { int xh,yh,xm,ym,xs,ys,s=0,m=10,h=10,xcenter,ycenter; String today; //获得当前的日期 currentDate=new Date(); //创建一个日期输出格式的对象, //Locale.getDefault()获取当前缺省语言环境的通用方法。 SimpleDateFormat formatter=new SimpleDateFormat("s",Locale.getDefault()); try { //取当前时间值赋给整形变量s。 s=Integer.parseInt(formatter.format(currentDate)); } catch(NumberFormatException n) { s=0; } formatter.applyPattern("m"); try { ////取当前时间值赋给整形变量m。 m=Integer.parseInt(formatter.format(currentDate)); } catch(NumberFormatException n) { m=10; } formatter.applyPattern("h"); try { ////取当前时间值赋给整形变量h。 h=Integer.parseInt(formatter.format(currentDate)); } catch(NumberFormatException n) { h=10; } //applyPattern将给定的非本地化的模式字符串应用到该数据格式中。 formatter.applyPattern("EEE MMM dd hh:mm:ss yyyy"); //取得当前日期格式,给字符串today。 today=formatter.format(currentDate); //为时钟定位。 xcenter=80; ycenter=55; xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*45+xcenter); ys=(int)(Math.sin(s*3.14f/30-3.14f/2)*45+ycenter); xm=(int)(Math.cos(m*3.14f/30-3.14f/2)*40+xcenter); ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*40+ycenter); xh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*30+xcenter); yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*30+ycenter); g.setFont(clockFaceFont); g.setColor(handColor); //画圆,向circle传递函数。设置圆心的大小。 circle(xcenter,ycenter,49,g); g.setColor(numberColor); //输出字符串,规定其位置输出。 g.drawString("9",xcenter-45,ycenter+3); g.drawString("3",xcenter+40,ycenter+3); g.drawString("12",xcenter-5,ycenter-37); g.drawString("6",xcenter-3,ycenter+45); g.setColor(getBackground()); if(xs!=lastxs||ys!=lastys) { g.drawLine(xcenter,ycenter,lastxs,lastys); g.drawString(lastdate,5,125); } if(xm!=lastxm||ym!=lastym) { g.drawLine(xcenter,ycenter-1,lastxm,lastym); g.drawLine(xcenter-1,ycenter,lastxm,lastym); } if(xh!=lastxh||yh!=lastyh) { g.drawLine(xcenter,ycenter-1,lastxh,lastyh); g.drawLine(xcenter-1,ycenter,lastxh,lastyh); } g.setColor(numberColor); g.drawString("",5,125); g.drawString(today,5,125); g.drawLine(xcenter,ycenter,xs,ys); g.setColor(handColor); g.drawLine(xcenter,ycenter-1,xm,ym); g.drawLine(xcenter-1,ycenter,xm,ym); g.drawLine(xcenter,ycenter-1,xh,yh); g.drawLine(xcenter-1,ycenter,xh,yh); lastxs=xs;lastys=ys; lastxm=xm;lastym=ym; lastxh=xh;lastyh=yh; lastdate=today; currentDate=null; } public void start() { //实例化线程对象。调用start方法。 timer=new Thread(this); timer.start(); } public void stop() { timer=null; } public void run() { //获得当前的线程并实例化。 Thread me=Thread.currentThread(); while(timer==me) { try { //线程等待一秒。 Thread.currentThread().sleep(1000); } catch(InterruptedException e) { } //刷新。 repaint(); } } public void update(Graphics g) { paint; } } |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |