Java中如何实现显示动态的时间
Java中如何实现显示动态的时间
本文所述实例可以实现Java在界面上动态的显示时间。具体实现
方法汇总如下:
1.方法一用TimerTask:
利用和ask来做动态更新,毕竟
每次更新可以看作是计时1秒发生一次。
代码如下:
ion;import
DateFormat;ar;import
;;import
ask;;import
;;/***Thisclassisa
simpleJFrameimplementationtoexplainhowto*displaytime
dynamicallyontheJSwing-badinterface.*@authorEdison*
*/publicclassTimeFrameextendsJFrame{/**Variables*/private
JPaneltimePanel;privateJLabeltimeLabel;privateJLabel
displayArea;privateStringDEFAULT_TIME_FORMAT=
"HH:mm:ss";privateStringtime;privateintONE_SECOND=1000;
publicTimeFrame(){timePanel=newJPanel();timeLabel=new
JLabel("CurrentTime:");displayArea=newJLabel();
configTimeArea();(timeLabel);
(displayArea);(timePanel);
aultCloOperation(EXIT_ON_CLOSE);e(new
Dimension(200,70));ationRelativeTo(null);}/***This
methodcreatesatimertasktothetimepercond*/private
voidconfigTimeArea(){Timertmr=newTimer();
leAtFixedRate(newJLabelTimerTask(),newDate(),
ONE_SECOND);}/***Timertasktothetimedisplayarea**/
protectedclassJLabelTimerTaskextends
TimerTask{SimpleDateFormatdateFormatter=new
SimpleDateFormat(DEFAULT_TIME_FORMAT);@Overridepublic
voidrun(){time=
(tance().getTime());
t(time);}}publicstaticvoidmain(Stringarg[])
{TimeFrametimeFrame=newTimeFrame();
ible(true);}}
继承TimerTask来创建一个自定义的.task,获取当前时间,更新
displayArea.
然后创建一个timer的实例,每1秒执行一次timertask。由于用
schedule可能会有时间误差产生,所以直接调用精度更高的
scheduleAtFixedRate的。
2.方法二:利用线程:
这个就比较简单了。具体代码如下:
ion;import
DateFormat;ar;import
;;import
;/***ThisclassisasimpleJFrame
implementationtoexplainhowto*displaytimedynamicallyon
theJSwing-badinterface.*@authorEdison**/publicclass
DTimeFrame2extendsJFrameimplementsRunnable{private
JFrameframe;privateJPaneltimePanel;privateJLabeltimeLabel;
privateJLabeldisplayArea;privateString
DEFAULT_TIME_FORMAT="HH:mm:ss";privateint
ONE_SECOND=1000;publicDTimeFrame2(){timePanel=new
JPanel();timeLabel=newJLabel("CurrentTime:");displayArea=
newJLabel();(timeLabel);
(displayArea);(timePanel);
aultCloOperation(EXIT_ON_CLOSE);e(new
Dimension(200,70));ationRelativeTo(null);}publicvoid
run(){while(true){SimpleDateFormatdateFormatter=new
SimpleDateFormat(DEFAULT_TIME_FORMAT);
t((tance(
).getTime()));try{(ONE_SECOND);}catch(Exception
e){t("Error");}}}publicstaticvoid
main(Stringarg[]){DTimeFrame2df2=newDTimeFrame2();
ible(true);Threadthread1=newThread(df2);
();}}
比较:
个人倾向于方法一,因为Timer是可以被多个TimerTask共用,
而产生一个线程,会增加多线程的维护复杂度。
注意如下代码:
aultCloOperation();//给关闭按钮增加特定行
为ationRelativeTo(null);//让Frame一出来就在屏幕
中间,而不是左上方。
将上面方法一稍微一修改,就可以显示多国时间。代码如下:
Layout;import
Event;import
Listener;import
DateFormat;ar;import
;;import
ne;;import
ask;import
tComboBoxModel;import
Box;;import
;;/***Asimpleworld
clock*@authorEdison**/publicclassWorldTimeFrameextends
JFrame{/****/privatestaticfinallongrialVersionUID=
4782486524987801209L;privateStringtime;privateJPanel
timePanel;privateTimeZonetimeZone;privateJComboBox
zoneBox;privateJLabeldisplayArea;privateintONE_SECOND=
1000;privateStringDEFAULT_FORMAT="EEEdMMM,
HH:mm:ss";publicWorldTimeFrame(){zoneBox=new
JComboBox();timePanel=newJPanel();displayArea=new
JLabel();timeZone=ault();
el(new
DefaultComboBoxModel(ilableIDs()));
ionListener(newActionListener(){@Override
publicvoidactionPerformed(ActionEvente)
{updateTimeZone(eZone((String)
ectedItem()));}});configTimeArea();
(displayArea);out(newBorderLayout());
(zoneBox,);(timePanel,
);ationRelativeTo(null);
aultCloOperation(EXIT_ON_CLOSE);
ible(true);pack();}/***Thismethodcreatesatimer
tasktothetimepercond*/privatevoidconfigTimeArea()
{Timertmr=newTimer();leAtFixedRate(new
JLabelTimerTask(),newDate(),ONE_SECOND);}/***Timertask
tothetimedisplayarea**/publicclassJLabelTimerTaskextends
TimerTask{SimpleDateFormatdateFormatter=new
SimpleDateFormat(DEFAULT_FORMAT,H);
@Overridepublicvoidrun()
{eZone(timeZone);time=
(tance().getTime());
t(time);}}/***UpdatethetimeZone*
@paramnewZone*/publicvoidupdateTimeZone(TimeZone
newZone){ne=newZone;}publicstaticvoid
main(Stringarg[]){newWorldTimeFrame();}}
本来需要在updateTimeZone(TimeZonenewZone)中,更新
displayArea的。但是考虑到TimerTask执行的时间太短,才1秒钟,
以肉眼观察,基本上是和立刻更新没区别。如果TimerTask执行时间
长的话,这里就要立刻重新用心的时间更新一下displayArea。
补充:
①.pack()用来自动计算屏幕大小;
②.ilableIDs()用来获取所有的TimeZone。
【Java中如何实现显示动态的时间】
本文发布于:2022-11-13 18:22:45,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/12568.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |