A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范贞亮 中级黑马   /  2012-10-26 20:40  /  753 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    利用Java的GUI和多线程编程技术,编写一个时钟显示程序, 如下图:


代码:
  1. package cn.com.gui;

  2. import java.util.*;  
  3. import java.awt.*;  
  4. import java.applet.*;  
  5. import java.text.*;  
  6.   
  7. /**
  8. * Time!
  9. *
  10. * @author maxwee
  11. * @modified Daniel Peek replaced circle drawing calculation, few more changes
  12. */  
  13. public class Clock extends Applet implements Runnable {  
  14.     private volatile Thread timer; // The thread that displays clock  
  15.     private int lastxs, lastys, lastxm, lastym, lastxh, lastyh; // Dimensions used to draw hands   
  16.     private SimpleDateFormat formatter; // Formats the date displayed  
  17.     private String lastdate; // String to hold date displayed  
  18.     private Font clockFaceFont; // Font for number display on clock  
  19.     private Date currentDate; // Used to get date to display  
  20.     private Color handColor; // Color of main hands and dial  
  21.     private Color numberColor; // Color of second hand and numbers  
  22.     private int xcenter = 80, ycenter = 55; // Center position  
  23.   
  24.     public void init() {  
  25.         int x, y;  
  26.         lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;  
  27.         formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss yyyy", Locale  
  28.                 .getDefault());  
  29.         currentDate = new Date();  
  30.         lastdate = formatter.format(currentDate);  
  31.         clockFaceFont = new Font("Serif", Font.PLAIN, 14);  
  32.         handColor = Color.blue;  
  33.         numberColor = Color.darkGray;  
  34.   
  35.         try {  
  36.             setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),  
  37.                     16)));  
  38.         } catch (NullPointerException e) {  
  39.         } catch (NumberFormatException e) {  
  40.         }  
  41.         try {  
  42.             handColor = new Color(Integer  
  43.                     .parseInt(getParameter("fgcolor1"), 16));  
  44.         } catch (NullPointerException e) {  
  45.         } catch (NumberFormatException e) {  
  46.         }  
  47.         try {  
  48.             numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),  
  49.                     16));  
  50.         } catch (NullPointerException e) {  
  51.         } catch (NumberFormatException e) {  
  52.         }  
  53.         resize(300, 300); // Set clock window size  
  54.     }  
  55.   
  56.     // Paint is the main part of the program  
  57.     public void update(Graphics g) {  
  58.         int xh, yh, xm, ym, xs, ys;  
  59.         int s = 0, m = 10, h = 10;  
  60.         String today;  
  61.   
  62.         currentDate = new Date();  
  63.   
  64.         formatter.applyPattern("s");  
  65.         try {  
  66.             s = Integer.parseInt(formatter.format(currentDate));  
  67.         } catch (NumberFormatException n) {  
  68.             s = 0;  
  69.         }  
  70.         formatter.applyPattern("m");  
  71.         try {  
  72.             m = Integer.parseInt(formatter.format(currentDate));  
  73.         } catch (NumberFormatException n) {  
  74.             m = 10;  
  75.         }  
  76.         formatter.applyPattern("h");  
  77.         try {  
  78.             h = Integer.parseInt(formatter.format(currentDate));  
  79.         } catch (NumberFormatException n) {  
  80.             h = 10;  
  81.         }  
  82.   
  83.         // Set position of the ends of the hands  
  84.         xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);  
  85.         ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);  
  86.         xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);  
  87.         ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);  
  88.         xh = (int) (Math.cos((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + xcenter);  
  89.         yh = (int) (Math.sin((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + ycenter);  
  90.   
  91.         // Get the date to print at the bottom  
  92.         formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");  
  93.         today = formatter.format(currentDate);  
  94.   
  95.         g.setFont(clockFaceFont);  
  96.         // Erase if necessary  
  97.         g.setColor(getBackground());  
  98.         if (xs != lastxs || ys != lastys) {  
  99.             g.drawLine(xcenter, ycenter, lastxs, lastys);  
  100.             g.drawString(lastdate, 5, 125);  
  101.         }  
  102.         if (xm != lastxm || ym != lastym) {  
  103.             g.drawLine(xcenter, ycenter - 1, lastxm, lastym);  
  104.             g.drawLine(xcenter - 1, ycenter, lastxm, lastym);  
  105.         }  
  106.         if (xh != lastxh || yh != lastyh) {  
  107.             g.drawLine(xcenter, ycenter - 1, lastxh, lastyh);  
  108.             g.drawLine(xcenter - 1, ycenter, lastxh, lastyh);  
  109.         }  
  110.   
  111.         // Draw date and hands  
  112.         g.setColor(numberColor);  
  113.         g.drawString(today, 5, 125);  
  114.         g.drawLine(xcenter, ycenter, xs, ys);  
  115.         g.setColor(handColor);  
  116.         g.drawLine(xcenter, ycenter - 1, xm, ym);  
  117.         g.drawLine(xcenter - 1, ycenter, xm, ym);  
  118.         g.drawLine(xcenter, ycenter - 1, xh, yh);  
  119.         g.drawLine(xcenter - 1, ycenter, xh, yh);  
  120.         lastxs = xs;  
  121.         lastys = ys;  
  122.         lastxm = xm;  
  123.         lastym = ym;  
  124.         lastxh = xh;  
  125.         lastyh = yh;  
  126.         lastdate = today;  
  127.         currentDate = null;  
  128.     }  
  129.   
  130.     public void paint(Graphics g) {  
  131.         g.setFont(clockFaceFont);  
  132.         // Draw the circle and numbers  
  133.         g.setColor(handColor);  
  134.         g.drawArc(xcenter - 50, ycenter - 50, 100, 100, 0, 360);  
  135.         g.setColor(numberColor);  
  136.         g.drawString("9", xcenter - 45, ycenter + 3);  
  137.         g.drawString("3", xcenter + 40, ycenter + 3);  
  138.         g.drawString("12", xcenter - 5, ycenter - 37);  
  139.         g.drawString("6", xcenter - 3, ycenter + 45);  
  140.   
  141.         // Draw date and hands  
  142.         g.setColor(numberColor);  
  143.         g.drawString(lastdate, 5, 125);  
  144.         g.drawLine(xcenter, ycenter, lastxs, lastys);  
  145.         g.setColor(handColor);  
  146.         g.drawLine(xcenter, ycenter - 1, lastxm, lastym);  
  147.         g.drawLine(xcenter - 1, ycenter, lastxm, lastym);  
  148.         g.drawLine(xcenter, ycenter - 1, lastxh, lastyh);  
  149.         g.drawLine(xcenter - 1, ycenter, lastxh, lastyh);  
  150.     }  
  151.   
  152.     public void start() {  
  153.         timer = new Thread(this);  
  154.         timer.start();  
  155.     }  
  156.   
  157.     public void stop() {  
  158.         timer = null;  
  159.     }  
  160.   
  161.     public void run() {  
  162.         Thread me = Thread.currentThread();  
  163.         while (timer == me) {  
  164.             try {  
  165.                 Thread.currentThread().sleep(1000);  
  166.             } catch (InterruptedException e) {  
  167.             }  
  168.             repaint();  
  169.         }  
  170.     }  
  171.   
  172.     public String getAppletInfo() {  
  173.         return "Title: A Clock \n" + "Author: Rachel Gollub, 1995 \n"  
  174.                 + "An analog clock.";  
  175.     }  
  176.   
  177.     public String[][] getParameterInfo() {  
  178.         String[][] info = {  
  179.                 { "bgcolor", "hexadecimal RGB number",  
  180.                         "The background color. Default is the color of your browser." },  
  181.                 { "fgcolor1", "hexadecimal RGB number",  
  182.                         "The color of the hands and dial. Default is blue." },  
  183.                 { "fgcolor2", "hexadecimal RGB number",  
  184.                         "The color of the second hand and numbers. Default is dark gray." } };  
  185.         return info;  
  186.     }  
  187. }  
复制代码

Java4fs_clip_image002.jpg (4.8 KB, 下载次数: 12)

Java4fs_clip_image002.jpg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马