[英]how to put a timer on a JLabel to update itself every second
I created a game and in my swing GUI interface I want to put a timer.我创建了一个游戏,并在我的 swing GUI 界面中放置了一个计时器。 The way I do this at the moment is have a field with the current time, gotten with System.currentTimeMillis()
which gets it's value when the game starts.In the method of my game i put the System.currentTimeMillis()
- field;我目前这样做的方式是有一个带有当前时间的字段,使用System.currentTimeMillis()
获得它在游戏开始时获取它的值。在我的游戏方法中,我放置了System.currentTimeMillis()
- 字段; and it tells you the current time passed since the game started.它会告诉您自游戏开始以来经过的当前时间。
Nevertheless, how do get this to update itself every second lets say, so the JLabel
will have: timePassed: 0s, timePassed: 1s and so on.尽管如此,可以说如何让它每秒更新一次,所以JLabel
将具有:timePassed: 0s、timePassed: 1s 等等。 Have in mind that i don't use threads in my game at any point.请记住,我在任何时候都不会在我的游戏中使用线程。
EDIT: thank you all for your kind suggestions.编辑:谢谢大家的好意建议。 I used a combination of your answers please give me some feedback.我使用了您的答案的组合,请给我一些反馈。
I have the JLabel as a field called time.我将 JLabel 作为一个称为时间的字段。 (else i cant handle it). (否则我无法处理)。
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();
Have a look at the swing timer class .看看swing 定时器 class 。 It allows to setup recurring tasks quite easily.它允许很容易地设置重复任务。
This is how I would set my JLabel to update with time & date.这就是我将 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();
This is then added to your main class and the jlabel1/2/3 get updated with the timer.然后将其添加到您的主 class 并且 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();
wirite this in Constructor在构造函数中写这个
ActionListener taskPerformer = new ActionListener() { ActionListener taskPerformer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
jMenu11.setText(CurrentTime());
}
};
Timer t = new Timer(1000, taskPerformer);
t.start();
And this Write out Constructor而这个写出构造函数
public String 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;
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.