这是学校 java的一道期末考试题,钟表的指针借鉴的大佬的代码。。。。
代码流程
publicpublic class ClockApplet extends Applet implements Runnable{
全局变量的设置
初始化函数{
............
}
画图函数{
............
}
线程开始函数{
............
}
}
话不多说,直接上代码
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
-
-
- public class ClockApplet extends Applet implements Runnable{
- int x,y,r;
- int h,m,s;//时,分,秒
- double rad = Math.PI/180;// 1°
-
-
- //初始化函数
- public void init() {
- x = 0;
- y = 0;
- r = 100;
- Calendar now = new GregorianCalendar();
- s = now.get(Calendar.SECOND)*6;//转换成角度
- m = now.get(Calendar.MINUTE)*6;//转换为角度
- h = (now.get(Calendar.HOUR_OF_DAY)-12)*30
- + now.get(Calendar.MINUTE)/12*6;//获取小时
-
- //线程
- Thread t =new Thread(this);
- t.start();
- }
-
-
- //画图函数
- public void paint(Graphics g){
- super.paint(g);
- g.setColor(Color.WHITE);
- g.fillRect(0, 0, 300, 300);//填充背景
- g.setColor(Color.BLACK);
- g.drawOval(x, y, r*2, r*2);//画表盘
-
- /*drawLine(a,b,c,d)
- * a b 起点坐标
- * c d 终点坐标
- */
- //秒针
- int x1 = (int)(90*Math.sin(rad*s));
- int y1 = (int)(90*Math.cos(rad*s));
- g.drawLine(x+r, y+r, (x+r)+x1, (y+r)-y1);
-
- //分针
- x1 = (int)(80*Math.sin(rad*m));
- y1 = (int)(80*Math.cos(rad*m));
- g.drawLine(x+r, y+r, (x+r)+x1, (y+r)-y1);
-
- //时针
- x1 = (int)(60*Math.sin(rad*h));
- y1 = (int)(60*Math.cos(rad*h));
- g.drawLine(x+r, y+r, (x+r)+x1, (y+r)-y1);
-
- //画数字
- int d = 28;
- for(int i=1;i<=12;i++){
- x1 = (int)((r-10)*Math.sin(rad*d));
- y1 = (int)((r-10)*Math.cos(rad*d));
- g.drawString(i+"", x+r+x1-4, x+r-y1+5);
- d += 30;
- }
-
- //画刻度
- d = 0;
- for(int i=1;i<=60;i++){
- x1 = (int)((r-2)*Math.sin(rad*d));
- y1 = (int)((r-2)*Math.cos(rad*d));
- g.drawString(".", x+r+x1-1, x+r-y1+1);
- d += 6;
- }
- //显示时间
- Calendar now1 = new GregorianCalendar();
- int a,b,c;
- a = now1.get(Calendar.HOUR_OF_DAY);
- b = now1.get(Calendar.MINUTE);
- c = now1.get(Calendar.SECOND);
- g.drawString(a + ":" + b + ":" + c, 0, 10);
-
- }
- //实现Runnable
- public void run(){
- while(true){
-
- try{
-
- Thread.sleep(1000);//间隔一秒
-
- }catch(Exception ex){}
-
- //秒针每次走6°
- s += 6;
-
- //秒针归零
- if(s>=360){
-
- s = 0;
- m += 6;
-
- //分针走72°,时针走6°
- if(m==72 || m==144 || m==288){
- h += 6;
- }
-
- //分针归零
- if(m>=360){
- m = 0;
- h += 6;
- }
-
- //时针归零
- if(h>=360){
- h = 0;
-
- }
- }
-
- //重新绘制
- this.repaint();
- }
- }
-
-
- }
结果如下图,遗憾的是左上角的时间显示比系统时间晚了几毫秒。