⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myclock.java

📁 精通Java网络编程代码全部
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//MyClock.java
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是时针分针绘制使用的类
//接着上面的部分,下面是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=0.104719755;     //分针和秒针在表盘上的刻度(60个)间的弧度
    static final double HOUR=0.523598776;       //时针在表盘上的刻度(24个)间的弧度
	
    Thread clockThread = null; //使用多线程机制,用另一个线程不断显示图片
	
    //提供的默认参数,如果HTML文件里面没有给参数就使用
    int width = 100;
    int height = 100;
    Color bgColor = new Color(0,0,0);
    Color faceColor = new Color(0,0,0);
    Color sweepColor = new Color(255,0,0);
    Color minuteColor = new Color (192,192,192);
    Color hourColor = new Color (255,255,255);
    Color textColor = new Color (255,255,255);
    Color caseColor = new Color (0,0,0);
    Color trimColor = new Color (192,192,192);
    String logoString=null;
	
    Image images[] = new Image[2]; //背景和LOGO的图片
	
    boolean isPainted=false; //如果第一次载入时绘制背景及表盘,其他时候重绘则只绘制指针
	
    //时钟圆心的位置
    int x1,y1;
	
    //最上面那个三角形的刻度图形的坐标
    int xPoints[]=new int[3], yPoints[]=new int[3];
	
    //保存当前时间,转换成(double)(hours + minutes/60)
    Hms cur_time;
	
    //秒针、分针、时针
    SweepHand sweep;
    HmHand  minuteHand,
		hourHand;
	
    //用于绘制的时、分、秒
    double lastHour;
    int lastMinute,lastSecond;
	
    //显示日期和表盘上的字母的字体
    Font font;
	
    //图片显示使用了缓冲机制,offScrImage和offScrGC存放缓冲区内图片的信息
    Image offScrImage;
    Graphics offScrGC;
	
    //用于测试背景图片和LOGO图片
    MediaTracker tracker;
	
	
    int minDimension;   // 如果背景区域不是正方形的话,保证时钟在中间显示
    int originX;        // 时钟图形所在正方形区域的左上角X坐标
    int originY;        // 时钟图形所在正方形区域的左上角Y坐标
	
    double tzDifference=0;  //时区间的差,向西为负数,向东为正数
	
    boolean localOnly=false; //是否只使用本地时间,如果为FALSE则可以根据传入的时区显示该时区时间
	
	
    //保存参数的类型说明
    public String[][] getParameterInfo()
    {
        String[][] info = {
            {"width",       "int",      "APPLET的长度,以象素为单位"},
            {"height",      "int",      "APPLET的宽度,以象素为单位"},
            {"bgColor",     "string",   "背景颜色,e.g FF0000"},
            {"faceColor",   "string",   "表盘颜色"},
            {"sweepColor",  "string",   "秒针颜色"},
            {"minuteColor", "string",   "分针颜色"},
            {"hourColor",   "string",   "时针颜色"},
            {"textColor",   "string",   "文本颜色"},
            {"caseColor",   "string",   "框内颜色"},
            {"trimColor",   "string",   "空白区颜色"},
            {"bgImageURL",  "string",   "背景图片地址"},
            {"logoString",  "string",   "LOGO字符"},
            {"logoImageURL","string",   "LOGO图片地址"},
            {"timezone",    "real",     "时区间的差"},
            {"localonly",   "int",      "是否考虑到时区差别"}
        };
        return info;
    }
	
    //显示信息
    public String getAppletInfo()
    {
        return "版权所有,COPY必究,保护正版,人人有责";
    }
	
    void showURLerror(Exception e) 
    {
        String errorMsg = "URL错误:"+e;
        showStatus(errorMsg);
        System.err.println(errorMsg);
    }
	
    //相当于把时钟变成100×100的大小,percent即相对坐标
    private int size(int percent)
    {
        return (int)((double)percent/100.0 * (double)minDimension);
    }
	
    public void init()
    {
        URL imagesURL[] = new URL[2];
        String szImagesURL[] = new String[2];
        tracker = new MediaTracker(this);
        
        //得到HTML页面提供的参数,并把它转换相应的格式
        String paramString    = getParameter( "WIDTH"  );
        if( paramString != null )
            width = Integer.valueOf(paramString).intValue();
		
        paramString   = getParameter( "HEIGHT" );
        if( paramString != null )
            height = Integer.valueOf(paramString).intValue();
		
		paramString   = getParameter( "TIMEZONE" );
        if( paramString != null )
            tzDifference = Double.valueOf(paramString).doubleValue();
		
		paramString  =   getParameter( "LOCALONLY" );
        if( paramString != null && Integer.valueOf(paramString).intValue() != 0){
			localOnly=true;
			tzDifference=0.;
        }
		
        paramString    = getParameter( "BGCOLOR");
        if( paramString != null )
            bgColor=parseColorString(paramString);
		
        paramString    = getParameter( "FACECOLOR");
        if( paramString != null )
            faceColor=parseColorString(paramString);
		
        paramString    = getParameter( "SWEEPCOLOR");
        if( paramString != null )
            sweepColor=parseColorString(paramString);
		
        paramString    = getParameter( "MINUTECOLOR");
        if( paramString != null )
            minuteColor=parseColorString(paramString);
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -