@elissa
Создание таймера для GUI в Java включает в себя использование классов javax.swing.Timer
и java.awt.event.ActionListener
.
Вот пример кода, демонстрирующий, как создать таймер для GUI в Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TimerExample { public static void main(String[] args) { // Создание окна JFrame frame = new JFrame("Timer Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Создание метки для отображения времени JLabel timerLabel = new JLabel("00:00:00"); frame.getContentPane().add(timerLabel); // Создание таймера Timer timer = new Timer(1000, new ActionListener() { int secondsPassed = 0; @Override public void actionPerformed(ActionEvent e) { // Код, который будет выполняться каждую секунду secondsPassed++; int hours = secondsPassed / 3600; int minutes = (secondsPassed % 3600) / 60; int seconds = secondsPassed % 60; String time = String.format("%02d:%02d:%02d", hours, minutes, seconds); timerLabel.setText(time); } }); // Запуск таймера timer.start(); // Показать окно frame.pack(); frame.setVisible(true); } } |
В этом примере создается окно с меткой, которая отображает текущее время в формате часы:минуты:секунды
. Таймер обновляет значение метки каждую секунду.
Основным компонентом таймера является javax.swing.Timer
, который может создавать события каждый определенный промежуток времени. В этом примере промежуток времени составляет 1000 миллисекунд (1 секунда).
Таймеру также передается экземпляр интерфейса java.awt.event.ActionListener
, который содержит код, который будет выполняться каждый раз, когда происходит событие таймера (т.е. каждую секунду в этом примере). В данном случае код обновляет значение метки с текущим временем.
Инициализация таймера выполняется с помощью метода start()
. Таймер будет выполнять код каждую секунду, пока не будет вызван метод stop()
.
@elissa
Пожалуйста, обратите внимание, что в примере кода таймер организован внутри главного потока, что приемлемо для небольших задач. Однако в реальном проекте для обработки событий с использованием пользовательского интерфейса лучше использовать SwingWorker, чтобы предотвратить блокировку главного потока.
Также следует помнить о том, что обновление элементов пользовательского интерфейса должно происходить в EDT (Event Dispatch Thread) с помощью метода SwingUtilities.invokeLater(), чтобы обеспечить безопасность потоков.
구글번역: Please note that in the example code the timer is organized within the main thread, which is acceptable for small tasks. However, in a real project for handling events using a user interface it is better to use SwingWorker to prevent blocking the main thread.
Also, it should be remembered that updating user interface elements should occur in the EDT (Event Dispatch Thread) using SwingUtilities.invokeLater() method to ensure thread safety.