zoukankan      html  css  js  c++  java
  • Java编写时钟 Applet 程序

    简单分析:

    package clockApplet;
    
    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 = 0, y = 0, r = 100; // (x,y)为(0,0)点,表示原点
        int h, m, s; // 时,分,秒
        double rad = Math.PI / 180; //  1°
    
        /* 初始化函数 */
        public void init() {
            Calendar now = new GregorianCalendar(); /*
                                                     * GregorianCalendar(标准阳历)
                                                     * 是Calendar(日历)【国际环境下都能运行的程序】
                                                     * 的子类
                                                     */
            s = now.get(Calendar.SECOND) * 6; // 秒针转换成角度:1秒,秒针动一次,转动6°
            m = now.get(Calendar.MINUTE) * 6; // 分针转换为角度:1分,分针动一次,转动6°
            h = now.get(Calendar.HOUR) * 30 + now.get(Calendar.MINUTE) / 12 * 6; // 先把分化为小时,再乘以6°
            /*
             * Calendar.HOUR 显示范围:1-12(无论AM还是PM) Calendar.HOUR_OF_DAY 显示范围:1-24(包括PM
             */
    
            Thread t = new Thread(this);
            t.start();
        }
    
        /*
         * 画图函数 注意:Applet的画图界面以左上角为(0,0)原点坐标,即所有坐标均大于等于0,该点的坐标越大(且>0)
         */
        public void paint(Graphics g) {
            super.paint(g);
            /*
             * paint(g)函数会重绘图像,要加上super.paint(g),表示在原来图像的基础上,再画图。
             * 如果不加super.paint(g),重绘时,会将原有的绘制清空,再根据paing(g)函数绘制。
             */
    
            g.setColor(Color.BLACK);
            g.drawOval(x, y, r * 2, r * 2);// 画表
            /* drawOval(x,y,width,height)以矩形恰好框住椭圆,矩形左上角的顶点坐标为(x,y) */
    
            // 秒针
            int x1 = (int) (90 * Math.sin(rad * s));
            int y1 = (int) (90 * Math.cos(rad * s));
            g.drawLine(r, r, r + x1, r - y1);
            /* drawLine(a,b,c,d) (a,b)为起始坐标 (c,d)为终点坐标 */
    
            // 分针
            x1 = (int) (80 * Math.sin(rad * m));
            y1 = (int) (80 * Math.cos(rad * m));
            g.drawLine(r, r, r + x1, r - y1);
    
            // 时针
            x1 = (int) (60 * Math.sin(rad * h));
            y1 = (int) (60 * Math.cos(rad * h));
            g.drawLine(r, r, r + x1, r - y1);
    
            // 画数字
            int d = 30;
            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 + "", r + x1, r - y1);
                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(".", r + x1, r - y1);
                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° 分针的12倍,时针走一次
                    if (m == 72 || m == 144 || m == 288) {
                        h += 6;
                    }
    
                    // 分针归零
                    if (m >= 360) {
                        m = 0;
                        h += 6;
                    }
    
                    // 时针归零
                    if (h >= 360) {
                        h = 0;
    
                    }
                }
    
                // 重新绘制
                this.repaint();
            }
        }
    
    }

    无注释简码:

    package clockApplet;
    
    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class Test extends Applet implements Runnable {
        
        int x = 0,y = 0,r = 100,r1 = 90,r2 = 80,r3 = 60;
        double rad = Math.PI/180;
        int s,m,h;
        
        public void init(){
            Calendar calendar = new GregorianCalendar();
            s = calendar.get(Calendar.SECOND)*6;
            m = calendar.get(Calendar.MINUTE)*6;
            h = calendar.get(Calendar.HOUR)*30 + calendar.get(Calendar.MINUTE)/12*6;
            Thread thread = new Thread(this);
            thread.start();
        }
        
        public void paint(Graphics g) {
            super.paint(g);
            
            g.setColor(Color.black);
            g.drawOval(x, y, r*2, r*2);
            
            int x1 = (int)(r1*Math.sin(rad*s));
            int y1 = (int)(r1*Math.cos(rad*s));
            g.drawLine(r, r, r+x1, r-y1);
            
            x1 = (int)(r2*Math.sin(rad*m));
            y1 = (int)(r2*Math.cos(rad*m));
            g.drawLine(r, r, r+x1, r-y1);
            
            x1 = (int)(r3*Math.sin(rad*h));
            y1 = (int)(r3*Math.cos(rad*h));
            g.drawLine(r, r, r+x1, r-y1);
            
            int i,d = 0;
            for(i = 1;i <= 60;i++){
                x1 = (int)((r-2)*Math.sin(rad*d));
                y1 = (int)((r-2)*Math.cos(rad*d));
                g.drawString(".", r+x1, r-y1);
                d += 6;
            }
    //        
    //        d = 30;
    //        for(i = 1;i <= 12;i++){
    //            x1 = (int)((r-10)*Math.sin(rad*d));
    //            y1 = (int)((r-10)*Math.cos(rad*d));
    //            g.drawString(i+"", r+x1, r-y1);
    //            d+=30;
    //        }
            
            
            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);
            
        }
        
        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    System.err.println("出错");
                }
    
                s += 6;
                if (s >= 360) {
                    s = 0;
                    m += 6;
                    
                    if(m == 72||m == 144||m == 288){
                        h+=6;
                    }
                    
                    if (m >= 360) {
                        m = 0;
                        h += 6;
                    }
                    
                    if(h>=360){
                        h = 0;
                    }
                }
                this.repaint();
            }
            
            
        }
    
    }
    View Code

     简码实验结果:

  • 相关阅读:
    2019牛客暑期多校训练营(第六场)
    2019牛客暑期多校训练营(第五场)
    2019牛客暑期多校训练营(第四场)
    2019牛客暑期多校训练营(第三场)
    Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))
    Codeforces Round #486 (Div. 3) C "Equal Sums" (map+pair<>)
    Count New String
    【模板】后缀自动机 (SAM)
    Watchcow
    二次剩余
  • 原文地址:https://www.cnblogs.com/jdemarryme/p/7047751.html
Copyright © 2011-2022 走看看