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