Clock.java~2~
资源名称:Java.rar [点击查看]
上传用户:liming9091
上传日期:2014-10-27
资源大小:3376k
文件大小:5k
源码类别:
Java编程
开发平台:
Java
- package manpowersystem;
- import java.util.*;
- import java.awt.*;
- import javax.swing.*;
- public class Clock extends JPanel implements Runnable {
- boolean keepRunning = true;
- int lastxs = 0, lastys = 0, lastxm = 0, lastym = 0, lastxh = 0, lastyh = 0;
- Date dummy = new Date();
- String lastdate = dummy.toLocaleString();
- String myName;
- public Clock( String inName ) {
- myName = new String( inName );
- }
- // Plotpoints allows calculation to only cover 45 degrees of the circle,
- // and then mirror
- public void plotpoints( int x0, int y0, int x, int y, Graphics g ) {
- g.drawLine( x0 + x, y0 + y, x0 + x, y0 + y );
- g.drawLine( x0 + y, y0 + x, x0 + y, y0 + x );
- g.drawLine( x0 + y, y0 - x, x0 + y, y0 - x );
- g.drawLine( x0 + x, y0 - y, x0 + x, y0 - y );
- g.drawLine( x0 - x, y0 - y, x0 - x, y0 - y );
- g.drawLine( x0 - y, y0 - x, x0 - y, y0 - x );
- g.drawLine( x0 - y, y0 + x, x0 - y, y0 + x );
- g.drawLine( x0 - x, y0 + y, x0 - x, y0 + y );
- }
- // Circle is just Bresenham's algorithm for a scan converted circle
- public void circle( int x0, int y0, int r, Graphics g ) {
- int x, y;
- float d;
- x = 0;
- y = r;
- d = 5 / 4 - r;
- plotpoints( x0, y0, x, y, g );
- while ( y > x ) {
- if ( d < 0 ) {
- d = d + 2 * x + 3;
- x++;
- }
- else {
- d = d + 2 * ( x - y ) + 5;
- x++;
- y--;
- }
- plotpoints( x0, y0, x, y, g );
- }
- }
- // Paint is the main part of the program
- public void paintComponent( Graphics g ) {
- super.paintComponent( g );
- int xh, yh, xm, ym, xs, ys, s, m, h, xcenter, ycenter;
- String today;
- Date dat = new Date();
- s = dat.getSeconds();
- m = dat.getMinutes();
- h = dat.getHours();
- today = dat.toLocaleString();
- xcenter = getWidth() / 2;
- ycenter = getHeight() / 2 - 10;
- // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)
- // x = r(cos a) + xcenter, y = r(sin a) + ycenter
- xs = ( int ) ( Math.cos( s * 3.14f / 30 - 3.14f / 2 ) * 35 + xcenter );
- ys = ( int ) ( Math.sin( s * 3.14f / 30 - 3.14f / 2 ) * 35 + ycenter );
- xm = ( int ) ( Math.cos( m * 3.14f / 30 - 3.14f / 2 ) * 30 + xcenter );
- ym = ( int ) ( Math.sin( m * 3.14f / 30 - 3.14f / 2 ) * 30 + ycenter );
- xh = ( int ) ( Math.cos( ( h * 30 + m / 2 ) * 3.14f / 180 - 3.14f / 2 ) *
- 20 + xcenter );
- yh = ( int ) ( Math.sin( ( h * 30 + m / 2 ) * 3.14f / 180 - 3.14f / 2 ) *
- 20 + ycenter );
- // Draw the circle and numbers
- g.setFont( new Font( "TimesRoman", Font.PLAIN, 14 ) );
- g.setColor( Color.green );
- circle( xcenter, ycenter, 40, g );
- g.setColor( new Color( 0, 0, 200 ) );
- g.drawString( "9", xcenter - 35, ycenter + 3 );
- g.drawString( "3", xcenter + 30, ycenter + 3 );
- g.drawString( "12", xcenter - 5, ycenter - 27 );
- g.drawString( "6", xcenter - 3, ycenter + 35 );
- // Erase if necessary, and redraw
- g.setColor( Color.red );
- if ( xs != lastxs || ys != lastys ) {
- g.drawLine( xcenter, ycenter, lastxs, lastys );
- g.drawString( lastdate, xcenter - 55, ycenter + 55 );
- }
- if ( xm != lastxm || ym != lastym ) {
- g.drawLine( xcenter, ycenter - 1, lastxm, lastym );
- g.drawLine( xcenter - 1, ycenter, lastxm, lastym );
- }
- if ( xh != lastxh || yh != lastyh ) {
- g.drawLine( xcenter, ycenter - 1, lastxh, lastyh );
- g.drawLine( xcenter - 1, ycenter, lastxh, lastyh );
- }
- g.setColor( Color.red );
- g.drawString( today, xcenter - 55, ycenter + 55 );
- g.drawLine( xcenter, ycenter, xs, ys );
- g.setColor( Color.black );
- g.drawLine( xcenter, ycenter - 1, xm, ym );
- g.drawLine( xcenter - 1, ycenter, xm, ym );
- g.drawLine( xcenter, ycenter - 1, xh, yh );
- g.drawLine( xcenter - 1, ycenter, xh, yh );
- lastxs = xs;
- lastys = ys;
- lastxm = xm;
- lastym = ym;
- lastxh = xh;
- lastyh = yh;
- lastdate = today;
- }
- public void stop() {
- keepRunning = false;
- }
- public void run() {
- while ( keepRunning ) {
- try {
- Thread.sleep( 100 );
- }
- catch ( InterruptedException e ) {}
- repaint();
- }
- }
- }