尝试设计一个GUI程序,实现一个数字时钟,显示时分秒值。每隔0.5秒或1秒新一次显示。提示:可以采用Java中定时器类,数字时钟程序的运行效果如图8-5所示
设计一个简单的Java GUI数字时钟,我们可以利用Swing库来创建图形界面,并结合javax.swing.Timer
类来实现每隔一段时间更新时间的功能。以下是步骤概述:
导入必要的库:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
创建一个JFrame作为窗口基础:
public class DigitalClock extends JFrame { //... }
定义一个面板放置时间显示组件: ```java class TimePanel extends JPanel { private JLabel hourLabel, minuteLabel, secondLabel;
public TimePanel() { setLayout(new GridLayout(3, 1)); // 表示3行1列布局 // 初始化小时、分钟、秒钟标签并添加到面板上 hourLabel = new JLabel("00", SwingConstants.CENTER); minuteLabel = new JLabel("00", SwingConstants.CENTER); secondLabel = new JLabel("00", SwingConstants.CENTER); add(hourLabel); add(minuteLabel); add(secondLabel); }
// 更新时间的方法 void updateTime() { // 实现获取当前时间并更新标签内容 }
}
4. 创建定时器并设置更新事件处理程序:
```java
private Timer timer;
public void startTimer(int interval) {
timer = new Timer(interval, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateTime();
}
});
timer.start();
}
public void stopTimer() {
timer.stop();
}
DigitalClock
类中初始化时钟、面板,并设置定时器: ```java public class DigitalClock extends JFrame { private TimePanel timePanel;public DigitalClock() { setTitle("数字时钟"); setSize(200, 75); // 设置窗口大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出应用 timePanel = new TimePanel(); getContentPane().add(timePanel); startTimer(1000); // 每秒更新一次(1000毫秒) }
public static void main(String[] args) { EventQueue.invokeLater(() -> { DigitalClock clock = new DigitalClock(); clock.setVisible(true); }); }
// 时间更新方法的具体实现 private void updateTime() { // 使用Calendar或LocalTime类获取系统当前时间并格式化显示 Calendar cal = Calendar.getInstance(); timePanel.hourLabel.setText(pad(cal.get(Calendar.HOUR_OF_DAY))); timePanel.minuteLabel.setText(pad(cal.get(Calendar.MINUTE))); timePanel.secondLabel.setText(pad(cal.get(Calendar.SECOND))); }
private String pad(int num) { return String.format("%02d", num); }
}
```
6.