定义六个类用于实现整个可视化时钟
Clock.java:时钟类,聚合表盘和3个指针对象,构成整个时钟
Plate.java:表盘类,用来显示静态的时钟表盘、刻度等内容
Arm.java:指针类,用来显示时、分、秒指针
ClockComponent:可视化时钟组件类,时钟的可视化显示,即整个时钟界面的表盘显示。
ClockFrame:整个程序窗口类,用于显示整个程序的窗口。
VisualClock:主程序类,用于程序的启动。
主要的程序如下:
VisualClock:
import java.awt.EventQueue;
import javax.swing.JFrame;
/*顶层窗口 JFrame 内容区域包括 2 个部分,上方为时钟的可视化显示,下方
为文本显示,上方用 JComponent 组件实现,在其 paintComponent 方法中绘制,
下方用 JLabel 实现,可以采用 BorderLayout 布局实现
*/
//添加主程序类
public class VisualClock {
public static void main(String[] args) {
EventQueue.invokeLater(()->{
ClockFrame frame=new ClockFrame();
frame.setTitle("可视化时钟");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
frame.setVisible(true);
});
}
}
ClockFrame:
import java.awt.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.*;
import java.util.Date;
//创建顶层窗口类
public class ClockFrame extends JFrame {
private ClockComponent comp;//整个时钟的显示
private JLabel timeLabel;//时钟的文本显示
public ClockFrame() {
setSize(500,400);
setLayout(new BorderLayout());
comp=new ClockComponent();
add(comp, BorderLayout.CENTER);
JPanel timeLabelPanel=new JPanel();
timeLabel=new JLabel(""+new Date());
timeLabelPanel.add(timeLabel);
add(timeLabelPanel, BorderLayout.SOUTH);
//创建定时器并通过start启动定时器,每隔一秒根据当前系统生成的时间
//生成字符串,将字符串更新到timeLabel上,同时调用repaint方法刷新comp显示
new Timer(1000,event->{
Date date=new Date();
DateFormat format=new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String time=format.format(date);
timeLabel.setText(time);
comp.repaint();
}).start();
}
}
ClockCompon