导读:本期聚焦于小伙伴创作的《如何在Java Swing GUI中实现实时时间显示与倒计时功能》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Java Swing GUI中实现实时时间显示与倒计时功能》有用,将其分享出去将是对创作者最好的鼓励。

在Java Swing桌面应用开发中,实时时间显示和倒计时是比较常见的功能需求,比如考勤系统的时间面板、考试系统的倒计时提示等场景都需要用到。实现这两个功能的核心是利用Swing的定时器组件配合时间处理类来完成,下面详细介绍具体的实现步骤。

如何在Java Swing GUI中实现实时时间显示与倒计时功能

核心实现原理

实时时间显示和倒计时的实现都依赖javax.swing.Timer类,这个类可以按照指定的时间间隔触发动作事件,我们只需在事件处理逻辑中更新界面上的时间内容即可。实时时间需要不断获取当前系统时间并格式化展示,倒计时则需要维护一个剩余时间变量,每次触发定时器时递减并更新展示。

实时时间显示实现

步骤1:搭建基础界面

首先创建一个包含时间标签的Swing窗口,时间标签用于展示实时更新的时间内容。

import javax.swing.*;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class RealTimeClockDemo extends JFrame {
    private JLabel timeLabel;

    public RealTimeClockDemo() {
        // 设置窗口基本属性
        setTitle("实时时间显示");
        setSize(400, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.CENTER, 20, 60));

        // 初始化时间标签
        timeLabel = new JLabel();
        timeLabel.setFont(new Font("微软雅黑", Font.BOLD, 24));
        add(timeLabel);

        // 初始化定时器
        initTimer();
    }

    private void initTimer() {
        // 创建定时器,每1000毫秒(1秒)触发一次
        Timer timer = new Timer(1000, e -> {
            // 获取当前时间并格式化
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String currentTime = sdf.format(new Date());
            // 更新标签内容
            timeLabel.setText(currentTime);
        });
        // 启动定时器
        timer.start();
    }

    public static void main(String[] args) {
        // 在事件调度线程中运行界面
        SwingUtilities.invokeLater(() -> {
            RealTimeClockDemo demo = new RealTimeClockDemo();
            demo.setVisible(true);
        });
    }
}

步骤2:代码说明

上述代码中,Timer的构造方法第一个参数是延迟时间(单位毫秒),第二个参数是事件监听器。我们设置每1秒触发一次事件,在事件处理逻辑中获取当前系统时间,使用SimpleDateFormat格式化为可读的字符串后,更新到JLabel组件中。窗口启动后就能看到时间每秒自动刷新。

倒计时功能实现

步骤1:搭建倒计时界面

倒计时功能需要额外添加开始按钮和剩余时间标签,用户可以自定义倒计时的初始时长。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CountdownDemo extends JFrame {
    private JLabel countdownLabel;
    private JButton startButton;
    private Timer countdownTimer;
    // 倒计时剩余秒数,默认60秒
    private int remainingSeconds = 60;

    public CountdownDemo() {
        setTitle("倒计时功能");
        setSize(400, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.CENTER, 20, 50));

        // 初始化倒计时标签
        countdownLabel = new JLabel(formatTime(remainingSeconds));
        countdownLabel.setFont(new Font("微软雅黑", Font.BOLD, 24));
        add(countdownLabel);

        // 初始化开始按钮
        startButton = new JButton("开始倒计时");
        startButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        add(startButton);

        // 绑定按钮事件
        initButtonEvent();
    }

    // 将秒数格式化为分:秒的形式
    private String formatTime(int seconds) {
        int minutes = seconds / 60;
        int secs = seconds % 60;
        return String.format("%02d:%02d", minutes, secs);
    }

    private void initButtonEvent() {
        startButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 点击按钮后禁用按钮,防止重复点击
                startButton.setEnabled(false);
                // 初始化定时器,每1秒触发一次
                countdownTimer = new Timer(1000, event -> {
                    remainingSeconds--;
                    // 更新倒计时标签
                    countdownLabel.setText(formatTime(remainingSeconds));
                    // 倒计时结束,停止定时器并提示
                    if (remainingSeconds <= 0) {
                        countdownTimer.stop();
                        JOptionPane.showMessageDialog(CountdownDemo.this, "倒计时结束");
                        // 重置剩余时间,重新启用按钮
                        remainingSeconds = 60;
                        countdownLabel.setText(formatTime(remainingSeconds));
                        startButton.setEnabled(true);
                    }
                });
                countdownTimer.start();
            }
        });
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            CountdownDemo demo = new CountdownDemo();
            demo.setVisible(true);
        });
    }
}

步骤2:代码说明

倒计时功能的核心是维护remainingSeconds变量,每次定时器触发时将该变量减1,然后调用formatTime方法将剩余秒数转换为分:秒的格式展示。当剩余秒数小于等于0时,停止定时器并弹出提示框,同时重置倒计时状态和按钮状态,方便用户再次启动倒计时。

常见问题与优化

  • 时间更新卡顿:如果定时器间隔设置过短(比如小于100毫秒),可能会导致界面卡顿,实时时间和倒计时建议间隔设置为1000毫秒即可。
  • 时间格式错误:使用SimpleDateFormat时要注意格式字符的正确性,比如HH表示24小时制的小时,hh表示12小时制的小时。
  • 定时器资源释放:如果窗口关闭后定时器还在运行,需要在窗口关闭事件中调用timer.stop()释放资源,避免内存泄漏。

功能整合示例

如果需要在一个界面中同时展示实时时间和倒计时,可以将上述两个功能的代码整合到同一个窗口类中,分别创建两个Timer实例管理各自的更新逻辑即可,两个定时器的触发间隔都设置为1000毫秒不会互相影响。

Java_Swing实时时间显示倒计时GUI开发修改时间:2026-07-11 05:36:11

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。