我是一名Java初学者,正在尝试构建一个简单的秒表程序,该程序在swing GUI上显示时间。制作秒表很容易,但是我无法找到一种方法使GUI每秒更新一次,并在秒表上显示当前时间。我该如何实现呢?
我是一名Java初学者,正在尝试构建一个简单的秒表程序,该程序在swing GUI上显示时间。制作秒表很容易,但是我无法找到一种方法使GUI每秒更新一次,并在秒表上显示当前时间。我该如何实现呢?
以下内容可以满足需求:
import java.awt.EventQueue;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
/** @see https://dev59.com/fGXWa4cB1Zd3GeqPIwnd#11058263 */
public class Clock {
private Timer timer = new Timer();
private JLabel timeLabel = new JLabel(" ", JLabel.CENTER);
public Clock() {
JFrame f = new JFrame("Seconds");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(timeLabel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
timer.schedule(new UpdateUITask(), 0, 1000);
}
private class UpdateUITask extends TimerTask {
int nSeconds = 0;
@Override
public void run() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
timeLabel.setText(String.valueOf(nSeconds++));
}
});
}
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
final Clock clock = new Clock();
}
});
}
}
timeLabel
将始终显示计时器运行的秒数。
UpdateUITask
зҡ„ run()
ж–№жі•пјҢеӣ дёә java.util.Timer
дјҡеңЁ EDT д№ӢеӨ–иҝҗиЎҢе®ғгҖӮ - millimooseScheduleExecutorService
可能是更现代的等效替代 java.util.Timer
,尤其是在需要在多个地方使用相同的 API 时。) - millimoose
Swing
的Timer
类。有关如何使用Timer
的更多信息,请参见这个问题以及其中的答案。 - BoroTimer
使用相关的答案。@trashgod非常好的答案/示例,在这里+1,在那里+1...而且我今天的投票用完了 :) - Boro