Clock2.java
上传用户:bj_pst
上传日期:2019-07-07
资源大小:7353k
文件大小:8k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements.  See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License.  You may obtain a copy of the License at
  8. *
  9. *     http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. import java.util.*;
  18. import java.awt.*;
  19. import java.applet.*;
  20. import java.text.*;
  21. /**
  22.  * Time!
  23.  *
  24.  * @author Rachel Gollub
  25.  */
  26. public class Clock2 extends Applet implements Runnable {
  27.     Thread timer;                // The thread that displays clock
  28.     int lastxs, lastys, lastxm,
  29.         lastym, lastxh, lastyh;  // Dimensions used to draw hands 
  30.     SimpleDateFormat formatter;  // Formats the date displayed
  31.     String lastdate;             // String to hold date displayed
  32.     Font clockFaceFont;          // Font for number display on clock
  33.     Date currentDate;            // Used to get date to display
  34.     Color handColor;             // Color of main hands and dial
  35.     Color numberColor;           // Color of second hand and numbers
  36.     public void init() {
  37.         int x,y;
  38.         lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
  39.         formatter = new SimpleDateFormat ("EEE MMM dd hh:mm:ss yyyy", Locale.getDefault());
  40.         currentDate = new Date();
  41.         lastdate = formatter.format(currentDate);
  42.         clockFaceFont = new Font("Serif", Font.PLAIN, 14);
  43.         handColor = Color.blue;
  44.         numberColor = Color.darkGray;
  45.         try {
  46.             setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16)));
  47.         } catch (Exception E) { }
  48.         try {
  49.             handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16));
  50.         } catch (Exception E) { }
  51.         try {
  52.             numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16));
  53.         } catch (Exception E) { }
  54.         resize(300,300);              // Set clock window size
  55.     }
  56.     // Plotpoints allows calculation to only cover 45 degrees of the circle,
  57.     // and then mirror
  58.     public void plotpoints(int x0, int y0, int x, int y, Graphics g) {
  59.         g.drawLine(x0+x,y0+y,x0+x,y0+y);
  60.         g.drawLine(x0+y,y0+x,x0+y,y0+x);
  61.         g.drawLine(x0+y,y0-x,x0+y,y0-x);
  62.         g.drawLine(x0+x,y0-y,x0+x,y0-y);
  63.         g.drawLine(x0-x,y0-y,x0-x,y0-y);
  64.         g.drawLine(x0-y,y0-x,x0-y,y0-x);
  65.         g.drawLine(x0-y,y0+x,x0-y,y0+x);
  66.         g.drawLine(x0-x,y0+y,x0-x,y0+y);
  67.     }
  68.     // Circle is just Bresenham's algorithm for a scan converted circle
  69.     public void circle(int x0, int y0, int r, Graphics g) {
  70.         int x,y;
  71.         float d;
  72.         x=0;
  73.         y=r;
  74.         d=5/4-r;
  75.         plotpoints(x0,y0,x,y,g);
  76.         while (y>x){
  77.             if (d<0) {
  78.                 d=d+2*x+3;
  79.                 x++;
  80.             }
  81.             else {
  82.                 d=d+2*(x-y)+5;
  83.                 x++;
  84.                 y--;
  85.             }
  86.             plotpoints(x0,y0,x,y,g);
  87.         }
  88.     }
  89.     // Paint is the main part of the program
  90.     public void paint(Graphics g) {
  91.         int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter;
  92.         String today;
  93.         currentDate = new Date();
  94.         SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault());
  95.         try {
  96.             s = Integer.parseInt(formatter.format(currentDate));
  97.         } catch (NumberFormatException n) {
  98.             s = 0;
  99.         }
  100.         formatter.applyPattern("m");
  101.         try {
  102.             m = Integer.parseInt(formatter.format(currentDate));
  103.         } catch (NumberFormatException n) {
  104.             m = 10;
  105.         }    
  106.         formatter.applyPattern("h");
  107.         try {
  108.             h = Integer.parseInt(formatter.format(currentDate));
  109.         } catch (NumberFormatException n) {
  110.             h = 10;
  111.         }
  112.         formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
  113.         today = formatter.format(currentDate);
  114.         xcenter=80;
  115.         ycenter=55;
  116.     
  117.     // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)
  118.     // x = r(cos a) + xcenter, y = r(sin a) + ycenter
  119.     
  120.         xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter);
  121.         ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter);
  122.         xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter);
  123.         ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter);
  124.         xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + xcenter);
  125.         yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + ycenter);
  126.     
  127.     // Draw the circle and numbers
  128.     
  129.         g.setFont(clockFaceFont);
  130.         g.setColor(handColor);
  131.         circle(xcenter,ycenter,50,g);
  132.         g.setColor(numberColor);
  133.         g.drawString("9",xcenter-45,ycenter+3); 
  134.         g.drawString("3",xcenter+40,ycenter+3);
  135.         g.drawString("12",xcenter-5,ycenter-37);
  136.         g.drawString("6",xcenter-3,ycenter+45);
  137.     // Erase if necessary, and redraw
  138.     
  139.         g.setColor(getBackground());
  140.         if (xs != lastxs || ys != lastys) {
  141.             g.drawLine(xcenter, ycenter, lastxs, lastys);
  142.             g.drawString(lastdate, 5, 125);
  143.         }
  144.         if (xm != lastxm || ym != lastym) {
  145.             g.drawLine(xcenter, ycenter-1, lastxm, lastym);
  146.             g.drawLine(xcenter-1, ycenter, lastxm, lastym); }
  147.         if (xh != lastxh || yh != lastyh) {
  148.             g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
  149.             g.drawLine(xcenter-1, ycenter, lastxh, lastyh); }
  150.         g.setColor(numberColor);
  151.         g.drawString("", 5, 125);
  152.         g.drawString(today, 5, 125);    
  153.         g.drawLine(xcenter, ycenter, xs, ys);
  154.         g.setColor(handColor);
  155.         g.drawLine(xcenter, ycenter-1, xm, ym);
  156.         g.drawLine(xcenter-1, ycenter, xm, ym);
  157.         g.drawLine(xcenter, ycenter-1, xh, yh);
  158.         g.drawLine(xcenter-1, ycenter, xh, yh);
  159.         lastxs=xs; lastys=ys;
  160.         lastxm=xm; lastym=ym;
  161.         lastxh=xh; lastyh=yh;
  162.         lastdate = today;
  163.         currentDate=null;
  164.     }
  165.     public void start() {
  166.         timer = new Thread(this);
  167.         timer.start();
  168.     }
  169.     public void stop() {
  170.         timer = null;
  171.     }
  172.     public void run() {
  173.         Thread me = Thread.currentThread();
  174.         while (timer == me) {
  175.             try {
  176.                 Thread.currentThread().sleep(100);
  177.             } catch (InterruptedException e) {
  178.             }
  179.             repaint();
  180.         }
  181.     }
  182.     public void update(Graphics g) {
  183.         paint(g);
  184.     }
  185.     public String getAppletInfo() {
  186.         return "Title: A Clock nAuthor: Rachel Gollub, 1995 nAn analog clock.";
  187.     }
  188.   
  189.     public String[][] getParameterInfo() {
  190.         String[][] info = {
  191.             {"bgcolor", "hexadecimal RGB number", "The background color. Default is the color of your browser."},
  192.             {"fgcolor1", "hexadecimal RGB number", "The color of the hands and dial. Default is blue."},
  193.             {"fgcolor2", "hexadecimal RGB number", "The color of the seconds hand and numbers. Default is dark gray."}
  194.         };
  195.         return info;
  196.     }
  197. }