java秒表_Java实现的计时器【秒表】功能示例
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实现的计时器【秒表】功能示例相关推荐
- java entryset()_Java TreeMap entrySet()用法及代码示例
Java中的java.util.TreeMap.entrySet()方法用于从树图中包含的相同元素中创建一个集合.它本质上返回树图的集合视图,或者我们可以创建一个新集合并将Map元素存储到其中. 用法 ...
- java自定义迭代器作用_Java实现的自定义迭代器功能示例
本文实例讲述了Java实现的自定义迭代器功能.分享给大家供大家参考,具体如下: 编写自己的Iterator,实现Iterator接口,这里多说一句,实现Iterable后,可以用"forea ...
- java对接微信分享_Java编程调用微信分享功能示例
本文实例讲述了Java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的 ...
- java如何调用微信功能_Java编程调用微信分享功能示例
本文实例讲述了java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的 ...
- java 验证码_java实现简单的验证码功能
最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...
- 用集合编写的java通讯录_java使用集合实现通讯录功能
本文实例为大家分享了java使用集合实现通讯录的具体代码,供大家参考,具体内容如下 代码有些繁琐,只适合初学者. 项目1 java通讯录 方法(声明方法的类) 代码块 代码块语法遵循标准markdow ...
- java抢红包_Java 用Redis 实现抢红包功能
红包功能描述 红包功能现在已经很普遍了,主要功能发红包和抢红包. 一发一抢或一发多抢,主要难点还是一发多择抢高并发场景. 红包功能分析 首先我们假设会员体系和金额账号体系都已经存在,我们本功能只是一个 ...
- 砸金蛋java代码_java实现砸金蛋抽奖功能
本文实例为大家分享了java实现砸金蛋抽奖的具体代码,供大家参考,具体内容如下 代码如下 需求:用户每一次砸金蛋,抽中一等奖的概率为2% 二等奖10% 三等奖18% 四等奖70%. 累计砸第n次时必抽 ...
- java formatter()_Java Formatter locale()用法及代码示例
locale()方法是java.util.Formatter的内置方法,该方法返回语言环境.此区域设置由格式化程序构造设置.具有语言环境参数的该对象的format方法不会更改此值. 用法: publi ...
最新文章
- Owasp live CD 2011下载地址
- 你们都在用IntelliJ IDEA吗?或许你们需要看一下这篇博文
- gmod的css模块放哪里,webpack打包css报错找不到模块?
- php中得到复选框的数据的代码,表单复选框向PHP传输数据的代码
- Opencv 图像增强算法 图像检测结果及代码
- 小程序webview不全屏_小程序不在小(深度)
- 不再遥不可及!盘点独角兽自动驾驶战略
- java手动调用finalize_Java并手动执行finalize
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集...
- python工资高还是java-python为什么叫爬虫 python工资高还是java的高
- js 获取当天23点59分59秒 时间戳
- 程序员根本不是稳定工作!
- window文件批量转换 cwp批量转换jpg
- wireshark、异常数据分析、常见RST介绍
- unreal编译源码搭建dedicated server的流水账——但是细
- 数据分析专题报告范文6篇_数据分析系列篇(6):如何写好一个专题的分析报告...
- 超声平面波复合成像仿真(ultrasound plane_wave compound imaging simulation)
- 经典面试题之Vue生命周期
- [CF1179E]Alesya and Discrete Mat
- 分布式服务架构下的身份认证