欢迎光临
我们一直在努力

一个经典的JAVA APPLET时钟程序(一)-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

 

转眼间一年又要过了,自己又老了一岁,郁闷啊。趁着还有几分钟才新年,赶快再发几篇文章,给过去的一年添点东西。

该程序是从网上发现的,是一个简单的时钟显示程序。

代码特色:
时钟代码提供了各种接口,可以在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是时针分针绘制使用的类

主函数看后续部分

转眼间一年又要过了,自己又老了一岁,郁闷啊。趁着还有几分钟才新年,赶快再发几篇文章,给过去的一年添点东西。

该程序是从网上发现的,是一个简单的时钟显示程序。

代码特色:
时钟代码提供了各种接口,可以在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是时针分针绘制使用的类

主函数看后续部分

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个经典的JAVA APPLET时钟程序(一)-JSP教程,Java技巧及代码
分享到: 更多 (0)