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)
  {
    paintPresent;
  }
}


   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