利用JFrame实现时间输出和计时器功能,输出当前时间XXXX年XX月XX日 xx时xx分xx秒。秒表,可以开始计时,暂停,继续计时和清零的功能。功能虽然简单,但挺好玩的。做的时候没有加入大量其他的设计让外观变的好看,感兴趣的还可以往上面加其他功能。
这个大概是半年前弄的小玩意,当时没有接触到博客,最近在整理代码时无意间发现,觉得挺有意思的,拿出来给自己总结一下。
唯一碰到的坑就是这两个东西分开时都能正常,当合并在一起时,线程之间会发生冲突,时间错乱,当时想了很久没有想到,后来真正接触到了守护线程,内部类的时候,定义了守护线程,定义了内部类,将冲突的线程给分离开,最终实现了
效果图如下
先说说思路,两个lable,一个显示当前时间,一个显示开始计时的时间。一共两个按钮,开始和清零,给这两个按钮设置监听器,并且设置一个状态,状态默认是暂停的,在开始按钮的监听事件中判断。当为true时按钮显示为继续,当点击后状态改变为false,按钮显示为暂停。调用对应的线程处理不同的事情。
主要讲那个设置的状态理解透那就不难了,定义一个stopped状态
<strong>//计时器初始状态是暂停的
private long pauseStart=progranStart;</strong>
是否开始或者继续计时都是由该状态决定,进入计时器线程后,状态值设置为true。当进入到监听器时,判断状态值,为true则开始计时,每毫秒刷新一次,并将状态改变为false,按钮显示为暂停,当点击暂停时,状态变成true,计时停止,按钮变成继续。这里比较容易混乱建议拿着代码多敲几遍理解一下。
清零按钮的监听器事件设置,就是将lable中的初始值00:00:00 000还原,将状态变成true。
而时间显示线程写成外部类,避免与时间计时线程相冲突。再有线程去调用,每秒刷新一次。
代码里面都有注释
代码如下: