本项目为一个简单的Java应用程序,用于实时显示当前时间。通过图形用户界面展示小时、分钟和秒的流逝,帮助用户随时掌握准确的时间信息。
表盘式时钟的Java实现代码如下:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Clock extends JFrame implements ActionListener {
int x, y, x0, y0, r, h, olds_x, olds_y, oldm_x, oldm_y, oldh_x, oldh_y,
ss, mm,hh;
final double RAD = Math.PI / 180;
public Clock() {
super(Java时钟);
setDefaultCloseOperation(3);
Image image = getToolkit().getImage(clock.gif); // 设置图标
setIconImage(image);
setSize(200, 200);
setBackground(Color.black);
setLocation(300,150);
setResizable(false);
show();
int delay = 1000;
ActionListener drawClock = new ActionListener(){
public void actionPerformed(ActionEvent evt){
repaint(); // 每隔一秒刷新画布
}
};
new Timer(delay,drawClock).start();
}
public void actionPerformed(ActionEvent e) {
}
// 绘制图形方法
public void paint(Graphics g) {
Graphics2D g2D = (Graphics2D)g;
Insets insets = getInsets();
int L = insets.left/2, T = insets.top/2;
h = getSize().height;
// 画圆背景
g.setColor(Color.white);
g.drawOval(L+40,T + 40,h-80 ,h - 80);
r = h / 2 - 40;
x0 = 40 + r -5 + L;
y0 = 40+r -5-T ;
int ang=60 ;
// 绘制时钟上的12个数字
for(int i = 1;i <= 12;i++){
x =(int)((r+10)*Math.cos(RAD*ang)+x0);
y=(int) ((r+10)* Math.sin(RAD * ang) +y0);
g.drawString(+i, x , h - y );
ang -=30;
}
Calendar now = new GregorianCalendar(); // 获取当前时间
int nowh=now.get(Calendar.HOUR_OF_DAY);
int nowm =now.get (Calendar.MINUTE);
int nows =now. get( Calendar.SECOND);
String st;
if(nowh <10)st=0+nowh ; else st= + nowh;
if(nowm<10 )st+=:0 + nowm ;
else st += :+ nowm;
if(nows< 10)st+= :0 + nows;
else st += :+nows ;
// 显示时间
g.setColor(Color.pink);
g.fillRect(L, T ,50,28 );
g.setColor( Color.blue);
g.drawString(st,L+2,T + 26 );
ss =90 - nows * 6;
mm=90- nowm*6 ;
hh=90-nowh *30- nowm /2 ;
x0=r+40+L;
y0=r +40+T;
g2D.setStroke(new BasicStroke(1.2f)); // 秒针
if (olds_x > 0){
g.setColor(getBackground());
g.drawLine(x0, y0 , olds_x,h -olds_y );
}
else{
old_m = mm;
old_h=hh ;
}
int x=(int)(r*0.9 * Math.cos(RAD*ss))+x0;
int y =(int) (r* 0.9*Math.sin(RAD* ss)+y0-2*T);
g.setColor(Color.yellow);
g.drawLine(x0, y0 , x,h - y );
olds_x = x;
olds_y=y;
// 分针
if(oldm_x > 0){
g.setColor(getBackground());
g.drawLine( x0,y0 , oldm_x,h-oldm_y);
}
int xx=(int)(r*0.6 * Math.cos(RAD*mm))+x0;
int yy =(int) ( r* 0.6*Math.sin(RAD* mm)+y0-2*T);
g.setColor(Color.black);
g.drawLine(x0,y0 ,xx,h -yy );
oldm_x = xx ;
oldm_y=yy ;