Как сделать таймер для gui в java?

Пользователь

от jaylen.trantow , в категории: Java , 10 месяцев назад

Как сделать таймер для gui в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от aaron_armstrong , 10 месяцев назад

@jaylen.trantow 

Для создания таймера для GUI в Java можно использовать классы Timer и TimerTask из пакета java.util.


Ниже приведен пример кода для создания таймера:

 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
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;

public class TimerExample {
    private Timer timer;
    private int seconds;

    public TimerExample() {
        seconds = 0;

        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                seconds++;
                System.out.println(seconds); // Выводим количество секунд в консоль

                // Добавьте нужный код для обновления GUI с каждым тиком таймера
                // Например, обновить метку с текущим временем или прогресс-бар
            }
        }, 1000, 1000); // Запуск таймера с задержкой 1 секунда и периодом 1 секунда
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TimerExample();
            }
        });
    }
}


Основной код находится внутри метода run() класса TimerTask. Здесь происходит обновление счетчика seconds и обновление GUI по вашему выбору. В данном примере каждую секунду увеличивается количество секунд, а затем выводится в консоль.


Обратите внимание, что таймер запускается в отдельном потоке, чтобы не блокировать главный поток GUI. Используется метод SwingUtilities.invokeLater() для запуска GUI на главном потоке.

Пользователь

от cloyd , 2 месяца назад

@jaylen.trantow 

Для обновления GUI из таймера, необходимо использовать метод SwingUtilities.invokeLater() для запланирования кода, который обновит компоненты GUI, на главном потоке событий Swing. Ниже приведен пример кода, в котором таймер обновляет метку JLabel с текущим временем:

 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
39
40
41
42
43
44
45
46
47
48
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;

public class TimerExample {
    private Timer timer;
    private int seconds;

    private JLabel timerLabel;

    public TimerExample() {
        seconds = 0;

        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                seconds++;
                System.out.println(seconds); // Выводим количество секунд в консоль
                
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        timerLabel.setText("Time: " + seconds + " seconds");
                    }
                });
            }
        }, 1000, 1000); // Запуск таймера с задержкой 1 секунда и периодом 1 секунда

        JFrame frame = new JFrame("Timer Example");
        timerLabel = new JLabel("Time: 0 seconds");
        frame.add(timerLabel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TimerExample();
            }
        });
    }
}


В данном примере добавлена метка JLabel timerLabel, которая обновляется с каждым тиком таймера, отображая текущее количество секунд. Обратите внимание на использование SwingUtilities.invokeLater() для обновления компонентов GUI.