我创建了一个游戏,我想在我的swing GUI界面中放置一个计时器。我现在做这件事的方法是用当前时间的字段,用System.currentTimeMillis()
得到,它在游戏开始时得到它的值。在我的游戏方法中,我放了System.currentTimeMillis()
-字段;它告诉你从比赛开始到现在的时间。
然而,如何让它每秒更新一次,比如说,JLabel
将有:timePassed:0s,timePassed:1s等等。请记住,我在任何时候都不会在游戏中使用线程。
编辑:谢谢大家的建议。我使用了你的答案组合,请给我一些反馈。
我把JLabel作为一个叫做时间的字段。(否则我处理不了)。
time = new JLabel("Time Passed: " + timePassed() + " sec");
panel_4.add(time);
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
time.setText("Time Passed: " + timePassed() + " sec");
}
};
Timer timer = new Timer(1000, actionListener);
timer.start();
看看swing timer类。它可以很容易地设置重复任务。
这就是我将JLabel设置为随时间更新的方式&日期
Timer SimpleTimer = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
jLabel1.setText(SimpleDay.format(new Date()));
jLabel2.setText(SimpleDate.format(new Date()));
jLabel3.setText(SimpleTime.format(new Date()));
}
});
SimpleTimer.start();
然后将其添加到您的主类中,jlabel1/2/3将随计时器更新。
new Thread(new Runnable
{
public void run()
{
long start = System.currentTimeMillis();
while (true)
{
long time = System.currentTimeMillis() - start;
int seconds = time / 1000;
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
label.setText("Time Passed: " + seconds);
}
});
try { Thread.sleep(100); } catch(Exception e) {}
}
}
}).start();
在Constructor 中进行此操作
ActionListener taskPerformer=新ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
jMenu11.setText(CurrentTime());
}
};
Timer t = new Timer(1000, taskPerformer);
t.start();
这个写出的构造函数
公共字符串CurrentTime(){
Calendar cal = new GregorianCalendar();
int second = cal.get(Calendar.SECOND);
int min = cal.get(Calendar.MINUTE);
int hour = cal.get(Calendar.HOUR);
String s=(checkTime(hour)+":"+checkTime(min)+":"+checkTime(second));
jMenu11.setText(s);
return s;
}
public String checkTime(int t){
String time1;
if (t < 10){
time1 = ("0"+t);
}
else{
time1 = (""+t);
}
return time1;
}