Clock.java~4~
上传用户:liming9091
上传日期:2014-10-27
资源大小:3376k
文件大小:5k
源码类别:

Java编程

开发平台:

Java

  1. package manpowersystem;
  2. import java.util.*;
  3. import java.awt.*;
  4. import javax.swing.*;
  5. public class Clock extends JPanel implements Runnable {
  6.     boolean keepRunning = true;
  7.     int lastxs = 0, lastys = 0, lastxm = 0, lastym = 0, lastxh = 0, lastyh = 0;
  8.     Date dummy = new Date();
  9.     String lastdate = dummy.toLocaleString();
  10.     String myName;
  11.     public Clock( String inName ) {
  12.         myName = new String( inName );
  13.     }
  14.     public void plotpoints( int x0, int y0, int x, int y, Graphics g ) {
  15.         g.drawLine( x0 + x, y0 + y, x0 + x, y0 + y );
  16.         g.drawLine( x0 + y, y0 + x, x0 + y, y0 + x );
  17.         g.drawLine( x0 + y, y0 - x, x0 + y, y0 - x );
  18.         g.drawLine( x0 + x, y0 - y, x0 + x, y0 - y );
  19.         g.drawLine( x0 - x, y0 - y, x0 - x, y0 - y );
  20.         g.drawLine( x0 - y, y0 - x, x0 - y, y0 - x );
  21.         g.drawLine( x0 - y, y0 + x, x0 - y, y0 + x );
  22.         g.drawLine( x0 - x, y0 + y, x0 - x, y0 + y );
  23.     }
  24.     // Circle is just Bresenham's algorithm for a scan converted circle
  25.     public void circle( int x0, int y0, int r, Graphics g ) {
  26.         int x, y;
  27.         float d;
  28.         x = 0;
  29.         y = r;
  30.         d = 5 / 4 - r;
  31.         plotpoints( x0, y0, x, y, g );
  32.         while ( y > x ) {
  33.             if ( d < 0 ) {
  34.                 d = d + 2 * x + 3;
  35.                 x++;
  36.             }
  37.             else {
  38.                 d = d + 2 * ( x - y ) + 5;
  39.                 x++;
  40.                 y--;
  41.             }
  42.             plotpoints( x0, y0, x, y, g );
  43.         }
  44.     }
  45.     // Paint is the main part of the program
  46.     public void paintComponent( Graphics g ) {
  47.         super.paintComponent( g );
  48.         int xh, yh, xm, ym, xs, ys, s, m, h, xcenter, ycenter;
  49.         String today;
  50.         Date dat = new Date();
  51.         s = dat.getSeconds();
  52.         m = dat.getMinutes();
  53.         h = dat.getHours();
  54.         today = dat.toLocaleString();
  55.         xcenter = getWidth() / 2;
  56.         ycenter = getHeight() / 2 - 10;
  57.         // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)
  58.         // x = r(cos a) + xcenter, y = r(sin a) + ycenter
  59.         xs = ( int ) ( Math.cos( s * 3.14f / 30 - 3.14f / 2 ) * 35 + xcenter );
  60.         ys = ( int ) ( Math.sin( s * 3.14f / 30 - 3.14f / 2 ) * 35 + ycenter );
  61.         xm = ( int ) ( Math.cos( m * 3.14f / 30 - 3.14f / 2 ) * 30 + xcenter );
  62.         ym = ( int ) ( Math.sin( m * 3.14f / 30 - 3.14f / 2 ) * 30 + ycenter );
  63.         xh = ( int ) ( Math.cos( ( h * 30 + m / 2 ) * 3.14f / 180 - 3.14f / 2 ) *
  64.                        20 + xcenter );
  65.         yh = ( int ) ( Math.sin( ( h * 30 + m / 2 ) * 3.14f / 180 - 3.14f / 2 ) *
  66.                        20 + ycenter );
  67.         // Draw the circle and numbers
  68.         g.setFont( new Font( "TimesRoman", Font.PLAIN, 14 ) );
  69.         g.setColor( Color.green );
  70.         circle( xcenter, ycenter, 40, g );
  71.         g.setColor( new Color( 0, 0, 200 ) );
  72.         g.drawString( "9", xcenter - 35, ycenter + 3 );
  73.         g.drawString( "3", xcenter + 30, ycenter + 3 );
  74.         g.drawString( "12", xcenter - 5, ycenter - 27 );
  75.         g.drawString( "6", xcenter - 3, ycenter + 35 );
  76.         // Erase if necessary, and redraw
  77.         g.setColor( Color.red );
  78.         if ( xs != lastxs || ys != lastys ) {
  79.             g.drawLine( xcenter, ycenter, lastxs, lastys );
  80.             g.drawString( lastdate, xcenter - 55, ycenter + 55 );
  81.         }
  82.         if ( xm != lastxm || ym != lastym ) {
  83.             g.drawLine( xcenter, ycenter - 1, lastxm, lastym );
  84.             g.drawLine( xcenter - 1, ycenter, lastxm, lastym );
  85.         }
  86.         if ( xh != lastxh || yh != lastyh ) {
  87.             g.drawLine( xcenter, ycenter - 1, lastxh, lastyh );
  88.             g.drawLine( xcenter - 1, ycenter, lastxh, lastyh );
  89.         }
  90.         g.setColor( Color.red );
  91.         g.drawString( today, xcenter - 55, ycenter + 55 );
  92.         g.drawLine( xcenter, ycenter, xs, ys );
  93.         g.setColor( Color.black );
  94.         g.drawLine( xcenter, ycenter - 1, xm, ym );
  95.         g.drawLine( xcenter - 1, ycenter, xm, ym );
  96.         g.drawLine( xcenter, ycenter - 1, xh, yh );
  97.         g.drawLine( xcenter - 1, ycenter, xh, yh );
  98.         lastxs = xs;
  99.         lastys = ys;
  100.         lastxm = xm;
  101.         lastym = ym;
  102.         lastxh = xh;
  103.         lastyh = yh;
  104.         lastdate = today;
  105.     }
  106.     public void stop() {
  107.         keepRunning = false;
  108.     }
  109.     public void run() {
  110.         while ( keepRunning ) {
  111.             try {
  112.                 Thread.sleep( 100 );
  113.             }
  114.             catch ( InterruptedException e ) {}
  115.             repaint();
  116.         }
  117.     }
  118. }