Java实现时间动态显示方法汇总
这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下
本文所述实例可以实现Java在界面上动态的显示时间。具体实现方法汇总如下:
1.方法一 用TimerTask:
利用java.util.Timer和java.util.TimerTask来做动态更新,毕竟每次更新可以看作是计时1秒发生一次。
代码如下:
- import java.awt.Dimension;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- /**
- * This class is a simple JFrame implementation to explain how to
- * display time dynamically on the JSwing-based interface.
- * @author Edison
- *
- */
- public class TimeFrame extends JFrame
- {
- /*
- * Variables
- */
- private JPanel timePanel;
- private JLabel timeLabel;
- private JLabel displayArea;
- private String DEFAULT_TIME_FORMAT = "HH:mm:ss";
- private String time;
- private int ONE_SECOND = 1000;
- public TimeFrame()
- {
- timePanel = new JPanel();
- timeLabel = new JLabel("CurrentTime: ");
- displayArea = new JLabel();
- configTimeArea();
- timePanel.add(timeLabel);
- timePanel.add(displayArea);
- this.add(timePanel);
- this.setDefaultCloseOperation(EXIT_ON_CLOSE);
- this.setSize(new Dimension(200,70));
- this.setLocationRelativeTo(null);
- }
- /**
- * This method creates a timer task to update the time per second
- */
- private void configTimeArea() {
- Timer tmr = new Timer();
- tmr.scheduleAtFixedRate(new JLabelTimerTask(),new Date(), ONE_SECOND);
- }
- /**
- * Timer task to update the time display area
- *
- */
- protected class JLabelTimerTask extends TimerTask{
- SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT);
- @Override
- public void run() {
- time = dateFormatter.format(Calendar.getInstance().getTime());
- displayArea.setText(time);
- }
- }
- public static void main(String arg[])
- {
- TimeFrame timeFrame=new TimeFrame();
- timeFrame.setVisible(true);
- }
- }/* 何问起 hovertree.com */
继承TimerTask来创建一个自定义的task,获取当前时间,更新displayArea.
然后创建一个timer的实例,每1秒执行一次timertask。由于用schedule可能会有时间误差产生,所以直接调用精度更高的scheduleAtFixedRate的。
2. 方法二:利用线程:
这个就比较简单了。具体代码如下:
- import java.awt.Dimension;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- /**
- * This class is a simple JFrame implementation to explain how to
- * display time dynamically on the JSwing-based interface.
- * @author Edison
- *
- */
- public class DTimeFrame2 extends JFrame implements Runnable{
- private JFrame frame;
- private JPanel timePanel;
- private JLabel timeLabel;
- private JLabel displayArea;
- private String DEFAULT_TIME_FORMAT = "HH:mm:ss";
- private int ONE_SECOND = 1000;
- public DTimeFrame2()
- {
- timePanel = new JPanel();
- timeLabel = new JLabel("CurrentTime: ");
- displayArea = new JLabel();
- timePanel.add(timeLabel);
- timePanel.add(displayArea);
- this.add(timePanel);
- this.setDefaultCloseOperation(EXIT_ON_CLOSE);
- this.setSize(new Dimension(200,70));
- this.setLocationRelativeTo(null);
- }
- public void run()
- {
- while(true)
- {
- SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT);
- displayArea.setText(dateFormatter.format(
- Calendar.getInstance().getTime()));
- try
- {
- Thread.sleep(ONE_SECOND);
- }
- catch(Exception e)
- {
- displayArea.setText("Error!!!");
- }
- }
- }
- public static void main(String arg[])
- {
- DTimeFrame2 df2=new DTimeFrame2();
- df2.setVisible(true);
- Thread thread1=new Thread(df2);
- thread1.start();
- }
- }
- /* hwq2.com */
比较:
个人倾向于方法一,因为Timer是可以被多个TimerTask共用,而产生一个线程,会增加多线程的维护复杂度。
注意如下代码:
- jFrame.setDefaultCloseOperation(); // 给关闭按钮增加特定行为
- jFrame.setLocationRelativeTo(null); // 让Frame一出来就在屏幕中间,而不是左上方。
将上面方法一稍微一修改,就可以显示多国时间。代码如下:
- import java.awt.BorderLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Locale;
- import java.util.TimeZone;
- import java.util.Timer;
- import java.util.TimerTask;
- import javax.swing.DefaultComboBoxModel;
- import javax.swing.JComboBox;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- /**
- * A simple world clock
- * @author Edison
- *
- */
- public class WorldTimeFrame extends JFrame
- {
- /**
- *
- */
- private static final long serialVersionUID = 4782486524987801209L;
- private String time;
- private JPanel timePanel;
- private TimeZone timeZone;
- private JComboBox zoneBox;
- private JLabel displayArea;
- private int ONE_SECOND = 1000;
- private String DEFAULT_FORMAT = "EEE d MMM, HH:mm:ss";
- public WorldTimeFrame()
- {
- zoneBox = new JComboBox();
- timePanel = new JPanel();
- displayArea = new JLabel();
- timeZone = TimeZone.getDefault();
- zoneBox.setModel(new DefaultComboBoxModel(TimeZone.getAvailableIDs()));
- zoneBox.addActionListener(new ActionListener(){
- @Override
- public void actionPerformed(ActionEvent e) {
- updateTimeZone(TimeZone.getTimeZone((String) zoneBox.getSelectedItem()));
- }
- });
- configTimeArea();
- timePanel.add(displayArea);
- this.setLayout(new BorderLayout());
- this.add(zoneBox, BorderLayout.NORTH);
- this.add(timePanel, BorderLayout.CENTER);
- this.setLocationRelativeTo(null);
- this.setDefaultCloseOperation(EXIT_ON_CLOSE);
- this.setVisible(true);
- pack();
- }
- /**
- * This method creates a timer task to update the time per second
- */
- private void configTimeArea() {
- Timer tmr = new Timer();
- tmr.scheduleAtFixedRate(new JLabelTimerTask(),new Date(), ONE_SECOND);
- }
- /**
- * Timer task to update the time display area
- *
- */
- public class JLabelTimerTask extends TimerTask{
- SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_FORMAT, Locale.ENGLISH);
- @Override
- public void run() {
- dateFormatter.setTimeZone(timeZone);
- time = dateFormatter.format(Calendar.getInstance().getTime());
- displayArea.setText(time);
- }
- }
- /**
- * Update the timeZone
- * @param newZone
- */
- public void updateTimeZone(TimeZone newZone)
- {
- this.timeZone = newZone;
- }
- public static void main(String arg[])
- {
- new WorldTimeFrame();
- }
- }/* 何问起 hovertree.com */
本来需要在updateTimeZone(TimeZone newZone)中,更新displayArea的。但是考虑到TimerTask执行的时间太短,才1秒钟,以肉眼观察,基本上是和立刻更新没区别。如果TimerTask执行时间长的话,这里就要立刻重新用心的时间更新一下displayArea。
补充:
①. pack() 用来自动计算屏幕大小;
②. TimeZone.getAvailableIDs() 用来获取所有的TimeZone。
推荐:http://www.cnblogs.com/roucheng/p/3504465.html
Java实现时间动态显示方法汇总的更多相关文章
- Python实用日期时间处理方法汇总
这篇文章主要介绍了Python实用日期时间处理方法汇总,本文讲解了获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个d ...
- java比较时间的方法
一.通过compareTo Date date = new Date(1576118709574L); Date date1 = new Date(1576118709574L); Date date ...
- java中文乱码解决方法汇总
public static void main(String[] argv){ try { System.out.println(“中文”);//1 ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- OpenCV3 Java 机器学习使用方法汇总
原文链接:OpenCV3 Java 机器学习使用方法汇总 前言 按道理来说,C++版本的OpenCV训练的版本XML文件,在java中可以无缝使用.但要注意OpenCV本身的版本问题.从2.4 到3 ...
- Java向mysql中插入时间的方法
ava向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的 ...
- Java快速入门-03-小知识汇总篇(全)
Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...
- 最常见的Java面试题及答案汇总(三)
上一篇:最常见的Java面试题及答案汇总(二) 多线程 35. 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事 ...
- java 多线程40个问题汇总(转)
java 多线程40个问题汇总,自己也记录一份,如有侵权,联系删除 ref from :http://www.cnblogs.com/xrq730/p/5060921.html 1.多线程作用 - 利 ...
随机推荐
- Android编译过程中的碎碎念
刷机不是用rom包吗?怎么可以使用fastboot flashall -w将*.img文件刷入呢? 在Mac上面可以参考这篇文章进行刷机.概括来说解释从官方下载rom包,解压后运行./flash-al ...
- 搭建 SVN 服务器
安装.启动 SVN 服务器 在 Windows 下,可以使用以下命令将 SVN 服务注册到 windows 服务中去: sc create svnserver binPath= "drive ...
- 《Entity Framework 6 Recipes》中文翻译系列 (42) ------ 第八章 POCO之使用POCO
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第八章 POCO 对象不应该知道如何保存它们,加载它们或者过滤它们.这是软件开发中熟 ...
- 通过圆形载入View了解自定义View
这是自定义View的第一篇文章,通过制作简单的自定义View来了解自定义View的流程. 自定义View是Android学习和开发中必不可少的一部分.通过自定义View我们可以制作丰富绚丽的控件,自定 ...
- 微信小程序客服消息使用指南
客服消息使用指南 为丰富小程序的服务能力,提高服务质量,微信为小程序提供客服消息能力,以便小程序用户可以方便快捷地与小程序服务提供方进行沟通. 功能介绍 用户可使用小程序客服消息功能,与小程序的客服人 ...
- atom-shell程序打包
上一篇:http://www.cnblogs.com/luobenCode/p/4504910.html 打包之前要准备一下 请看这篇http://www.cnblogs.com/seanlv/arc ...
- Drupal8重命名上传的中文名文件
完整的模块代码文件在Coding.net上,想直接使用的请前往下载:https://coding.net/u/yamus/p/chinese_rename/git/tree/master 最近吧Dru ...
- iOS-App发布证书的申请与使用
i开发环境:xcode5.1.1 iphonesdk:7.1 开发机器:iMac 真机部署测试:apple个人开发者ID 向导: 必备IDP证书和distribution证书(第一个证书是真机部署测试 ...
- Entity Framework Code First关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- OpenCASCADE Rational Bezier Curves
OpenCASCADE Rational Bezier Curves eryar@163.com Abstract. Although polynomials offer many advantage ...