سلام
یک روش ر هم استفاده از یه کلاسیه بنام TimerTask که فکر کنم در واقع یک thread باشه.
من یه inner class کوچیک درست کردم و براش یه متد run درست کردم و متدیه که سر زمانبندی خودش اتوماتیک اجرا میشه.
اینطور که معلومه این کلاس TimerTask کاربردای زیادی داره از جمله زمانبندی یک کاری که قراره در فاصله های معین انجام بشه حتی طولانی در حد چند روز.
بعد از کلاس DateFormat استفاده کردم برای فرمت کردن تاریخ که از تابع System.currentTimeMillis زمان رو تا حد میلی ثانیه برمیگردونه. این سریع ترین تابع تاریخ و زمانش باشه فکر کنم گرچه وقتی فاصله یک ثانیه است زیاد مهم نیست ضمنا یک ثانیه هم با عدد 1000 مشخص شده.
این هم سورس کلاس (خود فرم اصلی هیچ تغییری نمیکنه) فقط مهمش اونجاست که label یی که قراره هر یک ثانیه refresh بشه
باید به innerclass پاس بشه.
Locale هم فکر میکنم میگه برای فارسی و ایران میخوام و DateFormat.ERA_FIELD هم جزو فرمتهای از پیش تعریف شده برای نمایش زمانه.
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.util.*;
import java.text.DateFormat;
public class Cstatusbar extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel lbl_username= null;
private JLabel lbltimedate = null;
private JLabel lblpersiandate= null;
private String strpersiandate= null;
private String stractiveuser= null;
private String strsystemdatetime= null;
private Cstatusbar Cstatusbar;
private Timer tmrShowDateTime;
public Cstatusbar() {
super();
super.setPreferredSize(new Dimension(100, 25));
super.setLayout(new BorderLayout());
super.setComponentOrientation(java.awt.ComponentOr ientation.RIGHT_TO_LEFT);
getStatuspanel();
tmrShowDateTime = new Timer ( ) ;
tmrShowDateTime.scheduleAtFixedRate( new UpdateDateTime (lbltimedate) ,0,1000) ;
}
/* public void setParameters(String persianDate,String ActiveUser,String SystemDatetime) {
strpersiandate = persianDate;
stractiveuser =ActiveUser ;
strsystemdatetime = SystemDatetime;
}*/
public void setusername(String username){
stractiveuser =username ;
lbl_username.setText(stractiveuser);
}
private String getusername() {
return stractiveuser;
}
public void setPersianDate(String PersianDate){
strpersiandate =PersianDate ;
}
private String getPersianDate() {
return strpersiandate;
}
public void setSystemDateTime(String SystemDateTime){
strsystemdatetime = SystemDateTime ;
}
private String getsystemdatetime() {
return strsystemdatetime;
}
private void getStatuspanel() {
lblpersiandate = new JLabel();
lblpersiandate.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
lblpersiandate.setMaximumSize(new java.awt.Dimension(400,16));
lblpersiandate.setPreferredSize(new java.awt.Dimension(400,16));
lblpersiandate.setBorder(javax.swing.BorderFactory .createEtchedBorder(javax.swing.border.EtchedBorde r.LOWERED));
lblpersiandate.setComponentOrientation(java.awt.Co mponentOrientation.RIGHT_TO_LEFT);
lbltimedate = new JLabel();
lbltimedate.setMaximumSize(new java.awt.Dimension(200,4));
lbltimedate.setPreferredSize(new java.awt.Dimension(200,4));
lbltimedate.setHorizontalAlignment(javax.swing.Swi ngConstants.CENTER);
lbltimedate.setHorizontalTextPosition(javax.swing. SwingConstants.CENTER);
lbltimedate.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
lbltimedate.setBorder(javax.swing.BorderFactory.cr eateEtchedBorder(javax.swing.border.EtchedBorder.L OWERED));
lbl_username = new JLabel();
lbl_username.setComponentOrientation(java.awt.Comp onentOrientation.RIGHT_TO_LEFT);
lbl_username.setPreferredSize(new java.awt.Dimension(300,16));
lbl_username.setMaximumSize(new java.awt.Dimension(200,16));
lbl_username.setHorizontalAlignment(javax.swing.Sw ingConstants.RIGHT);
lbl_username.setBorder(javax.swing.BorderFactory.c reateEtchedBorder(javax.swing.border.EtchedBorder. LOWERED));
lbl_username.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 13));
super.add(lblpersiandate, java.awt.BorderLayout.WEST);
super.add(lbltimedate, java.awt.BorderLayout.CENTER);
super.add(lbl_username, java.awt.BorderLayout.EAST);
}
class UpdateDateTime extends TimerTask {
JLabel DateTimeLabel;
Locale locale;
DateFormat dateFormatter;
public UpdateDateTime (JLabel aLabel) {
locale = new Locale("fa" , "IR");
dateFormatter = DateFormat.getTimeInstance(DateFormat.ERA_FIELD,lo cale);
DateTimeLabel = aLabel;
}
public void run ( ) {
if (DateTimeLabel != null) {
DateTimeLabel.setText(dateFormatter.format(System. currentTimeMillis()));
}
}
}
public void finalize () {
tmrShowDateTime.cancel();
}
}