快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

一个经典的JAVA APPLET时钟程序(一)

 

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

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

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

主函数看后续部分





返回类别: 教程
上一教程: 初学java应该注重的地方
下一教程: 穷人的通用OLAP方案III--JPivot表现层

您可以阅读与"一个经典的JAVA APPLET时钟程序(一)"相关的教程:
· 一个经典的JAVA APPLET时钟程序(一)
· 一个经典的JAVA APPLET程序(二)
· java编辑多语言的福音--推荐一个经典的多语言文件编辑的插件ResourceBundle Editor
· 用java小程序applet实现无限级树结构
· 一个必看的Java程序
    微笑服务 优质保证 索取样品