一个经典的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是时针分针绘制使用的类

主函数看后续部分

时间: 2024-10-30 00:59:52

一个经典的JAVA APPLET时钟程序(一)的相关文章

一个经典的JAVA APPLET程序(二)

程序 接着上面的部分,下面是APPLET主程序部分: public class MyClock extends Applet implements Runnable{ static final int BACKGROUND=0; //背景图片的序号,供数组使用 static final int LOGO=1; //LOGO图片的序号,供数组使用 static final String JAVEX="bear"; //表盘上显示的文字 static final double MINSEC

java 数字时钟程序代码

import java.awt.*; import java.util.*; import javax.swing.*; //数字时钟 public class ClockDemo extends JFrame implements Runnable{  Thread clock;     public ClockDemo(){   super("数字时钟"); //调用父类构造函数    setFont(new Font("Times New Roman",Fon

5、编写一个简单的JAVA Application 应用程序,编写两个方法area1,area2计算圆柱体的表面积和体积,圆柱体半径R=5,高H=10,并输出计

问题描述 5.编写一个简单的JAVAApplication应用程序,编写两个方法area1,area2计算圆柱体的表面积和体积,圆柱体半径R=5,高H=10,并输出计算结果急求答案谢谢

教你构建第一个Java Applet程序_java

介绍 Note: 在你开始本教程之前,你必须下载downloaded 并安装installed Java SE Development Kit. Java applets像Java应用程序一样,它们的建立都是遵循相同的三个步骤-编写,编译及运行.不同 的是,它们是在一部分网页上运行,而不是在你的桌面上运行. 本文的主要目的是创建一个简单的Java applet. 为了达到这一点要遵循以下三个基本步骤: 1. 在Java中编写一个简单的applet 2. 编译Java源代码 3. 创建一个涉及到a

使用Java Applet访问数据库

学习任何的程序语言,当然都得与数据库,Java刚刚诞生的时候,对数据库的支持并不是很好,经过这几年的发展,它对数据库的支持也已经完全达到了成熟的境地.由于这里主要是介绍Java Applet小程序, 因此,不可能用大的篇幅去给大家介绍数据库的知识了,怎么样去建立与设计数据库,还是请大家自己找点书看看吧!这儿,对不住了. 我们这儿以Microsoft Access数据库为例子来说明怎么实现一个数据库的打开与读取的知识. 第一步: 使用Microsoft Access创建一个数据库,也就是我的这个例

Java桌面应用程序开发简介

Java对于服务器,个人电脑和移动设备来说是一项伟大的技术.由于需要java的跨平台的特性,因此java在服务器和移动设备方面的应用是非常成功的.但java在个人电脑应用方面的情况和在服务器及移动设备方面的应用有所不同,但是这很快就会有所改变,至少比你想象得要快.在这篇文章中,我会分析一下java在桌面环境中的应用将怎样得到提升,然后具体说一下java GUI(用户图形接口)的三个主要的工具:AWT, Swing, 和SWT..在下文中,我将会开发一个完整的java桌面应用程序. Java与桌面

java-一个经典的Java面试题,异常处理

问题描述 一个经典的Java面试题,异常处理 什么情况下,finally中的代码不会执行(前提是执行到了try里面) 解决方案 在程序try中,执行了system.exit()方法.finally里面的代码就不会被执行了 解决方案二: http://my.oschina.net/MiniBu/blog/338123 解决方案三: try 中的代码没有任何异常时.在 try 中执行了退出等,都不会执行 finally 中的代码 解决方案四: 都是对的,但是第一个回答最早. 解决方案五: 用了got

Java、Java Applet与 &amp;#106avascript间的通信

摘 要:本文着重阐述了网页开发中,通过灵活使用从JavaScript语言中访问Java的方法.从JavaScript中访问JavaScript小程序的方法与变量,以及在Java Applet小程序中使用JavaScript等技术,实现这几种网页开发语言的互相补充,以开发更完美的Web应用程序. JavaScript是用于HTML环境的开发语言,提供了能够响应Web页面事件的脚本,可以完全访问浏览器窗口的各个方面,善于合并HTML.Java Applet小程序.插入件.服务器方程序和其他Web组件

将Flex集成到Java EE应用程序的最佳实践

简介:传统的 Java EE 应用程序通常使用某种 MVC 框架(例如,Struts)作为前端用户界面,随着 Flex 的兴起,基于 RIA 的客户端能够给用户带来更酷的界面,更短的响应时间,以及更接近于桌面应 用程序的体验.本文将讲述如何将 Flex 集成至一个现有的 Java EE 应用程序中,以及如何应用最佳实 践高效率地并行开发 Java EE 和 Flex. 开发环境 本文的开发环境为 Windows 7 Ultimate,Eclipse 3.4,Flex Builder 3.Java