转眼间一年又要过了,自己又老了一岁,郁闷啊。趁着还有几分钟才新年,赶快再发几篇文章,给过去的一年添点东西。
  
该程序是从网上发现的,是一个简单的时钟显示程序。 
代码特色: 时钟代码提供了各种接口,可以在HTML文件中设置,变化出多姿多彩的时钟模型, 参数说明见代码内info数组 
时钟的绘制采用双缓冲图形处理机制,即先在缓冲区内绘制图形,再把图形显示到网页上可以有效的防止闪烁。 
另外时钟的不断绘制是通过一个线程不断读取系统时间,如果时间有变化即绘制。采用一个线程绘制,一个线程处理网页比较符合APPLET设置规范。
  
代码部分:
  import java.awt.*; import java.applet.*; import java.util.*; import java.net.*; 
class Hms extends Date   {     public Hms(double localOffset){ //如果HTML文件中设置了时区,则把时间设为当地时区时间         super();         long tzOffset=getTimezoneOffset()*60L*1000L;         localOffset *= 3600000.0;         setTime(getTime() + tzOffset + (long)localOffset);     } 
    public Hms(){ //如果没有设置时区,则就使用当地的时间         super();     } 
    public double get_hours() //时间换算,把如5:30这样的时间换算成5.5     {         return (double)super.getHours()+(double)getMinutes()/60.0;     } } 
abstract class ClockHand //抽象类,提供时针、分针、秒针类使用 {     protected int baseX[], baseY[];     protected int transX[],transY[];     protected int numberOfPoints; 
    public ClockHand(int originX, int originY, int length,int thickness,int points){         baseX= new int[points]; baseY=new int[points];         transX= new int[points]; transY=new int[points];         initiallizePoints(originX,originY,length,thickness);         numberOfPoints=points;     } 
    abstract protected void initiallizePoints(  int originX,                                                 int originY,                                                 int length,                                                 int thickness); 
    abstract public void draw(Color color, double angle, Graphics g); 
    protected void transform(double angle) //通过角度计算出时针、分针、秒针的绘制位置      {         for(int i=0;i<numberOfPoints;i++){             transX[i]=(int)(    (baseX[0]-baseX[i]) * Math.cos(angle) -                                 (baseY[0]-baseY[i]) * Math.sin(angle) +                                  baseX[0]); 
            transY[i]=(int)(    (baseX[0]-baseX[i]) * Math.sin(angle) +                                 (baseY[0]-baseY[i]) * Math.cos(angle) +                                  baseY[0]);         }     } } 
//秒针使用的类 class SweepHand extends ClockHand  {     public SweepHand(int originX,int originY, int length, int points)     {         super(originX,originY,length,0,points);  } 
    protected void initiallizePoints(int originX,int originY, int length, int unused) //初始化点     {         baseX[0]=originX; baseY[0]=originY;         baseX[1]=originX; baseY[1]=originY-length/5;         baseX[2]=originX; baseY[2]=originY+length;     } 
    public void draw(Color color, double angle, Graphics g) //绘制秒针,为线段     {         transform(angle);         g.setColor(color);         g.drawLine(transX[1],transY[1],transX[2],transY[2]);     } } 
class HmHand extends ClockHand {     public HmHand(int originX,int originY, int length,int thickness, int points){         super(originX,originY,length,thickness,points);     } 
    protected void initiallizePoints(   int originX, //初始化点                                         int originY,                                         int length,                                         int thickness)     {         baseX[0]=originX;         baseY[0]=originY; 
        baseX[1]=baseX[0]-thickness/2;         baseY[1]=baseY[0]+thickness/2; 
        baseX[2]=baseX[1];         baseY[2]=baseY[0]+length- thickness; 
        baseX[3]=baseX[0];         baseY[3]=baseY[0]+length; 
        baseX[4]=baseX[0]+thickness/2;         baseY[4]=baseY[2]; 
        baseX[5]=baseX[4];         baseY[5]=baseY[1];     } 
    public void draw(Color color,double angle, Graphics g) //绘制时针分针,为多边形     {         transform(angle);         g.setColor(color);         g.fillPolygon(transX,transY,numberOfPoints);     } } 
Hms类是进行时间换算的类 ClockHand是绘制指针的抽象基类,同时提供将角度转换为坐标的方法 SweepHand是秒针绘制使用的类 HmHand是时针分针绘制使用的类
  
主函数看后续部分
 
   
 
  |