精灵王
- 注册日期2010-12-08
- 发帖数640
- QQ
- 火币1103枚
- 粉丝120
- 关注75
|
阅读:3083回复:0
一个经典的JAVA APPLET时钟程式(一)-JSP教程,Java技巧及代码
楼主#
更多
发布于:2011-01-08 20:53
| | | | 转眼间一年又要过了,自己又老了一岁,郁闷啊。趁着更有几分钟才新年,赶快再发几篇文章,给过去的一年添点东西。 该程式是从网上发现的,是个简单的时钟显示程式。代码特色: 时钟代码提供了各种接口,能在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=(int)( (basex[0]-basex) * math.cos(angle) - (basey[0]-basey) * math.sin(angle) + basex[0]); transy=(int)( (basex[0]-basex) * math.sin(angle) + (basey[0]-basey) * 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=(int)( (basex[0]-basex) * math.cos(angle) - (basey[0]-basey) * math.sin(angle) + basex[0]); transy=(int)( (basex[0]-basex) * math.sin(angle) + (basey[0]-basey) * 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是时针分针绘制使用的类 更多黑客技术 黑客软件 计算机技术 编程技术 网站技术 qq技术 IT新闻 黑客基地 请访问 灯火安全联盟 灯火黑客 www.hack8888.com/bbs
| | | | |
|