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

发布时间:2020-08-31 04:44:58

来源:脚本之家

阅读:150

作者:不能吃的坚果

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

应用名称:Java计时器

用到的知识:Java GUI编程

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

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

效果图:

源代码:

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:这里再为大家推荐几款时间及日期相关工具供大家参考使用:

Unix时间戳(timestamp)转换工具:http://tools.jb51.net/code/unixtime

在线日期/天数计算器:http://tools.jb51.net/jisuanqi/date_jisuanqi

在线日期计算器/相差天数计算器:http://tools.jb51.net/jisuanqi/datecalc

在线日期天数差计算器:http://tools.jb51.net/jisuanqi/onlinedatejsq

更多关于java相关内容感兴趣的读者可查看本站专题:《java日期与时间操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

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

java秒表_Java实现的计时器【秒表】功能示例相关推荐

  1. java entryset()_Java TreeMap entrySet()用法及代码示例

    Java中的java.util.TreeMap.entrySet()方法用于从树图中包含的相同元素中创建一个集合.它本质上返回树图的集合视图,或者我们可以创建一个新集合并将Map元素存储到其中. 用法 ...

  2. java自定义迭代器作用_Java实现的自定义迭代器功能示例

    本文实例讲述了Java实现的自定义迭代器功能.分享给大家供大家参考,具体如下: 编写自己的Iterator,实现Iterator接口,这里多说一句,实现Iterable后,可以用"forea ...

  3. java对接微信分享_Java编程调用微信分享功能示例

    本文实例讲述了Java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的 ...

  4. java如何调用微信功能_Java编程调用微信分享功能示例

    本文实例讲述了java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的 ...

  5. java 验证码_java实现简单的验证码功能

    最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...

  6. 用集合编写的java通讯录_java使用集合实现通讯录功能

    本文实例为大家分享了java使用集合实现通讯录的具体代码,供大家参考,具体内容如下 代码有些繁琐,只适合初学者. 项目1 java通讯录 方法(声明方法的类) 代码块 代码块语法遵循标准markdow ...

  7. java抢红包_Java 用Redis 实现抢红包功能

    红包功能描述 红包功能现在已经很普遍了,主要功能发红包和抢红包. 一发一抢或一发多抢,主要难点还是一发多择抢高并发场景. 红包功能分析 首先我们假设会员体系和金额账号体系都已经存在,我们本功能只是一个 ...

  8. 砸金蛋java代码_java实现砸金蛋抽奖功能

    本文实例为大家分享了java实现砸金蛋抽奖的具体代码,供大家参考,具体内容如下 代码如下 需求:用户每一次砸金蛋,抽中一等奖的概率为2% 二等奖10% 三等奖18% 四等奖70%. 累计砸第n次时必抽 ...

  9. java formatter()_Java Formatter locale()用法及代码示例

    locale()方法是java.util.Formatter的内置方法,该方法返回语言环境.此区域设置由格式化程序构造设置.具有语言环境参数的该对象的format方法不会更改此值. 用法: publi ...

最新文章

  1. Owasp live CD 2011下载地址
  2. 你们都在用IntelliJ IDEA吗?或许你们需要看一下这篇博文
  3. gmod的css模块放哪里,webpack打包css报错找不到模块?
  4. php中得到复选框的数据的代码,表单复选框向PHP传输数据的代码
  5. Opencv 图像增强算法 图像检测结果及代码
  6. 小程序webview不全屏_小程序不在小(深度)
  7. 不再遥不可及!盘点独角兽自动驾驶战略
  8. java手动调用finalize_Java并手动执行finalize
  9. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集...
  10. python工资高还是java-python为什么叫爬虫 python工资高还是java的高
  11. js 获取当天23点59分59秒 时间戳
  12. 程序员根本不是稳定工作!
  13. window文件批量转换 cwp批量转换jpg
  14. wireshark、异常数据分析、常见RST介绍
  15. unreal编译源码搭建dedicated server的流水账——但是细
  16. 数据分析专题报告范文6篇_数据分析系列篇(6):如何写好一个专题的分析报告...
  17. 超声平面波复合成像仿真(ultrasound plane_wave compound imaging simulation)
  18. 经典面试题之Vue生命周期
  19. [CF1179E]Alesya and Discrete Mat
  20. 分布式服务架构下的身份认证

热门文章

  1. 京东获得店铺的所有商品 API
  2. ssh备考-08 SSH三大框架整合
  3. 视频缓存AndroidVideoCache
  4. HC32F460(华大单片机)学习开发
  5. html5video拼接屏一部分黑屏,拼接屏常见问题及解决方法
  6. # Java简易计算器编程思想
  7. Synology Drive Client首次安装登录,提示:用户名/密码无效或用户权限不足
  8. 将Webpack搭起的服务设为可局域网访问
  9. Mechatrolink III转EtherCAT网关模块解决方案
  10. 一阶指数平滑c语言,时间序列数据之一、二、三阶指数平滑法