最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示方法匯總

 更新時(shí)間:2014年08月12日 10:07:41   投稿:shichen2014  
這篇文章主要介紹了Java實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示方法匯總,很實(shí)用的功能,需要的朋友可以參考下

本文所述實(shí)例可以實(shí)現(xiàn)Java在界面上動(dòng)態(tài)的顯示時(shí)間。具體實(shí)現(xiàn)方法匯總?cè)缦拢?/p>

1.方法一 用TimerTask:

利用java.util.Timer和java.util.TimerTask來(lái)做動(dòng)態(tài)更新,畢竟每次更新可以看作是計(jì)時(shí)1秒發(fā)生一次。
代碼如下:

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); 
 } 
}
 


繼承TimerTask來(lái)創(chuàng)建一個(gè)自定義的task,獲取當(dāng)前時(shí)間,更新displayArea.
然后創(chuàng)建一個(gè)timer的實(shí)例,每1秒執(zhí)行一次timertask。由于用schedule可能會(huì)有時(shí)間誤差產(chǎn)生,所以直接調(diào)用精度更高的scheduleAtFixedRate的。
 
2. 方法二:利用線(xiàn)程:

這個(gè)就比較簡(jiǎn)單了。具體代碼如下:

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(); 
 } 
}

比較:

個(gè)人傾向于方法一,因?yàn)門(mén)imer是可以被多個(gè)TimerTask共用,而產(chǎn)生一個(gè)線(xiàn)程,會(huì)增加多線(xiàn)程的維護(hù)復(fù)雜度。

注意如下代碼:

jFrame.setDefaultCloseOperation(); // 給關(guān)閉按鈕增加特定行為
jFrame.setLocationRelativeTo(null); // 讓Frame一出來(lái)就在屏幕中間,而不是左上方。

將上面方法一稍微一修改,就可以顯示多國(guó)時(shí)間。代碼如下:

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();
 } 
}

本來(lái)需要在updateTimeZone(TimeZone newZone)中,更新displayArea的。但是考慮到TimerTask執(zhí)行的時(shí)間太短,才1秒鐘,以肉眼觀(guān)察,基本上是和立刻更新沒(méi)區(qū)別。如果TimerTask執(zhí)行時(shí)間長(zhǎng)的話(huà),這里就要立刻重新用心的時(shí)間更新一下displayArea。

補(bǔ)充:

①. pack() 用來(lái)自動(dòng)計(jì)算屏幕大小;
②. TimeZone.getAvailableIDs() 用來(lái)獲取所有的TimeZone。

相關(guān)文章

  • springboot接口服務(wù),防刷、防止請(qǐng)求攻擊,AOP實(shí)現(xiàn)方式

    springboot接口服務(wù),防刷、防止請(qǐng)求攻擊,AOP實(shí)現(xiàn)方式

    本文介紹了如何使用AOP防止Spring?Boot接口服務(wù)被網(wǎng)絡(luò)攻擊,通過(guò)在pom.xml中加入AOP依賴(lài),創(chuàng)建自定義注解類(lèi)和AOP切面,以及在業(yè)務(wù)類(lèi)中使用這些注解,可以有效地對(duì)接口進(jìn)行保護(hù),測(cè)試表明,這種方法有效地防止了網(wǎng)絡(luò)攻擊
    2024-11-11
  • SpringMVC上傳圖片代碼實(shí)例

    SpringMVC上傳圖片代碼實(shí)例

    這篇文章主要介紹了SpringMVC上傳圖片代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • java使用jacob.jar將word轉(zhuǎn)pdf

    java使用jacob.jar將word轉(zhuǎn)pdf

    這篇文章主要為大家詳細(xì)介紹了java利用jacob.jar將word轉(zhuǎn)pdf,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • SpringCloud OpenFeign基本介紹與實(shí)現(xiàn)示例

    SpringCloud OpenFeign基本介紹與實(shí)現(xiàn)示例

    OpenFeign源于Netflix的Feign,是http通信的客戶(hù)端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開(kāi)發(fā),讓開(kāi)發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-02-02
  • Java?CompletableFuture實(shí)現(xiàn)多線(xiàn)程異步編排

    Java?CompletableFuture實(shí)現(xiàn)多線(xiàn)程異步編排

    這篇文章主要為大家介紹了Java?CompletableFuture實(shí)現(xiàn)多線(xiàn)程異步編排,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Mybatis-plus插入數(shù)據(jù)遇到主鍵沒(méi)有默認(rèn)值的情況

    Mybatis-plus插入數(shù)據(jù)遇到主鍵沒(méi)有默認(rèn)值的情況

    這篇文章主要介紹了Mybatis-plus插入數(shù)據(jù)遇到主鍵沒(méi)有默認(rèn)值的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)

    SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)

    ShedLock 是一個(gè) Java 庫(kù),通常用于分布式系統(tǒng)中,確保定時(shí)任務(wù)(Scheduled Tasks)在集群環(huán)境下只被某一個(gè)實(shí)例執(zhí)行一次,它通過(guò)在共享資源中添加鎖的方式,本文給大家介紹了SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù),需要的朋友可以參考下
    2024-11-11
  • Spring注解 TX聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析

    Spring注解 TX聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Spring注解 - TX 聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java ServletContext對(duì)象用法解析

    Java ServletContext對(duì)象用法解析

    這篇文章主要介紹了Java ServletContext對(duì)象用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 一天時(shí)間用Java寫(xiě)了個(gè)飛機(jī)大戰(zhàn)游戲,朋友直呼高手

    一天時(shí)間用Java寫(xiě)了個(gè)飛機(jī)大戰(zhàn)游戲,朋友直呼高手

    前兩天我發(fā)現(xiàn)論壇有兩篇飛機(jī)大戰(zhàn)的文章異?;鸨?但都是python寫(xiě)的,竟然不是我大Java,說(shuō)實(shí)話(huà)作為老java選手,我心里是有那么一些失落的,今天特地整理了這篇文章,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

四子王旗| 兴安县| 丹寨县| 西峡县| 明星| 武功县| 兴安县| 鸡泽县| 贵阳市| 中江县| 芒康县| 图们市| 新津县| 秀山| 聊城市| 宜兰市| 马龙县| 潞城市| 南京市| 浮梁县| 辽源市| 徐州市| 化隆| 平阳县| 兴化市| 桃园市| 佛山市| 九龙坡区| 青海省| 东乌珠穆沁旗| 湄潭县| 防城港市| 汕尾市| 安陆市| 石首市| 平乡县| 花垣县| 珲春市| 屯昌县| 南投市| 如皋市|