软件编程
位置:首页>> 软件编程>> java编程>> Java实现的计时器【秒表】功能示例

Java实现的计时器【秒表】功能示例

作者:不能吃的坚果  发布时间:2023-11-10 21:24:50 

标签:Java,计时器,秒表

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

应用名称:Java计时器

用到的知识:Java GUI编程

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

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

效果图:

Java实现的计时器【秒表】功能示例

源代码:


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.aspxhome.com 计时器");
   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程序设计有所帮助。

来源:https://blog.csdn.net/C_jian/article/details/50506759

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com