⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.java~2~

📁 《Java课程设计案例精编(第二版)》-黄晓东-源代码-4450
💻 JAVA~2~
字号:
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();
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -