|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
转眼间一年又要过了,自己又老了一岁,郁闷啊。趁着还有几分钟才新年,赶紧再发几篇文章,给过去的一年添点东西。 该程序是从网上发现的,是一个简朴的时钟显示程序。 代码特色: 时钟代码提供了各种接口,可以在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程序员必读:基础篇(1) 下一教程: Jboss Ejb3.0 Statefull Bean 您可以阅读与"一个经典的JAVA APPLET时钟程序(一)"相关的教程: · 一个经典的JAVA APPLET时钟程序(一) · 一个经典的JAVA APPLET程序(二) · java编辑多语言的福音--推荐一个经典的多语言文件编辑的插件ResourceBundle Editor · JAVA做一个最简朴的SOCKET通话程序 · 初学Java写的第一个多线程程序 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |