Я начинающий Java, и я пытаюсь создать простую программу секундомера, которая отображает время на графическом интерфейсе swing. Сделать секундомер легко, однако я не могу найти способ сделать обновление GUI каждую секунду и отобразить текущее время на секундомере. Как я могу это сделать?Java Секундомер, который обновляет графический интерфейс каждую секунду?
ответ
Что-то вдоль этих линий должны сделать это:
import java.awt.EventQueue;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
/** @see https://stackoverflow.com/a/11058263/230513 */
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
всегда будет отображать количество секунд, таймер работает.
Я сделал графический интерфейс с помощью визуального редактора из netbeans, как я могу ссылаться на jlabel внутри GUI? – Dangerosking
@trashgod, в какой части требуется invokeLater? – GETah
@GETah 'run()' метод 'UpdateUITask', так как java.util.Timer будет запускать его с EDT. – millimoose
Используйте класс '' Таймера' Swing'. Более подробно о способе использования «Таймера» доступно, например, [в вопросе и, в частности, ответы на него.] (Http://stackoverflow.com/q/11053097/613495) – Boro
См. Также [ответ] (http://stackoverflow.com/a/5529043/230513). – trashgod
Да, я знаю, что у меня это было где-то [один из моих ответов, связанных с использованием таймера] (http://stackoverflow.com/a/5911514/613495). @trashgod очень хороший ответ/образец +1 здесь и +1 там ... и я вне голосов ... на сегодня :) – Boro