📄 clock.java~3~
字号:
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 + -