java 继承用Jpanel 能实现一个 获取系统时间吗? 自动更新
展开全部
使用线程,线程中的run方法中安排一个无限循环,循环每秒sleep一下,循环每执行一次,就更改一下JPanel中的一个JLabel组件就行了。
示例:
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class WorkTime extends JPanel{
private JLabel timeLabel = null;
private int hour;
public WorkTime() {
this(18);
}
public WorkTime(int hour) {
this.hour = hour;
timeLabel = new JLabel();
add(timeLabel);
//启动线程
new TimeThread().start();
}
public int getHour() {
return hour;
}
class TimeThread extends Thread{
//默认下午6点下班
public TimeThread() {
}
@Override
public void run() {
//获取当天下班时间
//获取当前时间
Calendar instance = Calendar.getInstance();
instance.setTime(new Date());
instance.set(Calendar.HOUR_OF_DAY, hour);
instance.set(Calendar.MINUTE, 0);
instance.set(Calendar.SECOND, 0);
long timeInMillis = instance.getTimeInMillis();
for(;;){
long currentTimeMillis = System.currentTimeMillis();
long time = timeInMillis-currentTimeMillis;
//小时
//分
double t = time/(1000*60*60D);
int minite = (int) ((t-Math.floor(t))*60);
int second = (int) ((time/1000)%60D);
//System.out.println("离下班还有:"+Math.floor(t)+"小时"+minite+"分"+second+"秒");
timeLabel.setText("离下班还有:"+Math.floor(t)+"小时"+minite+"分"+second+"秒");
if(t<0){
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
JFrame frame = new JFrame();
WorkTime wt = new WorkTime(23);
frame.setTitle("今天"+wt.getHour()+"点下班,等待下班中……");
frame.add(wt);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 80);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询