java秒表计时器显示_Java实现的计时器【秒表】功能示例|chu

本文实例讲述了Java实现的计时器【秒表】功能。分享给大家供大家参考,具体如下:

应用名称:Java计时器

用到的知识:Java GUI编程

开发环境:win8+eclipse+jdk1.8

功能说明:计时功能,精确到1毫秒,可暂停。

效果图:

20190925_5d8b8545696ab.gif

源代码:

import javax.swing.*; import java.awt.HeadlessException; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; /** * 计时器 */ public class Timer extends JFrame { /** * */ private static final long serialVersionUID = 1L; private static final String INITIAL_LABEL_TEXT = "00:00:00 000"; // 计数线程 private CountingThread thread = new CountingThread(); // 记录程序开始时间 private long programStart = System.currentTimeMillis(); // 程序一开始就是暂停的 private long pauseStart = programStart; // 程序暂停的总时间 private long pauseCount = 0; private JLabel label = new JLabel(INITIAL_LABEL_TEXT); private JButton startPauseButton = new JButton("开始"); private JButton resetButton = new JButton("清零"); private ActionListener startPauseButtonListener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (thread.stopped) { pauseCount += (System.currentTimeMillis() - pauseStart); thread.stopped = false; startPauseButton.setText("暂停"); } else { pauseStart = System.currentTimeMillis(); thread.stopped = true; startPauseButton.setText("继续"); } } }; private ActionListener resetButtonListener = new ActionListener() { public void actionPerformed(ActionEvent e) { pauseStart = programStart; pauseCount = 0; thread.stopped = true; label.setText(INITIAL_LABEL_TEXT); startPauseButton.setText("开始"); } }; public Timer(String title) throws HeadlessException { super(title); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocation(300, 300); setResizable(false); setupBorder(); setupLabel(); setupButtonsPanel(); startPauseButton.addActionListener(startPauseButtonListener); resetButton.addActionListener(resetButtonListener); thread.start(); // 计数线程一直就运行着 } // 为窗体面板添加边框 private void setupBorder() { JPanel contentPane = new JPanel(new BorderLayout()); contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); this.setContentPane(contentPane); } // 配置按钮 private void setupButtonsPanel() { JPanel panel = new JPanel(new FlowLayout()); panel.add(startPauseButton); panel.add(resetButton); add(panel, BorderLayout.SOUTH); } // 配置标签 private void setupLabel() { label.setHorizontalAlignment(SwingConstants.CENTER); label.setFont(new Font(label.getFont().getName(), label.getFont().getStyle(), 40)); this.add(label, BorderLayout.CENTER); } // 程序入口 public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } Timer frame = new Timer("www.jb51.net 计时器"); frame.pack(); frame.setVisible(true); } private class CountingThread extends Thread { public boolean stopped = true; private CountingThread() { setDaemon(true); } @Override public void run() { while (true) { if (!stopped) { long elapsed = System.currentTimeMillis() - programStart - pauseCount; label.setText(format(elapsed)); } try { sleep(1); // 1毫秒更新一次显示 } catch (InterruptedException e) { e.printStackTrace(); System.exit(1); } } } // 将毫秒数格式化 private String format(long elapsed) { int hour, minute, second, milli; milli = (int) (elapsed % 1000); elapsed = elapsed / 1000; second = (int) (elapsed % 60); elapsed = elapsed / 60; minute = (int) (elapsed % 60); elapsed = elapsed / 60; hour = (int) (elapsed % 60); return String.format("%02d:%02d:%02d %03d", hour, minute, second, milli); } } }

PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用:

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值