Обновление JLabel новыми данными один раз в час - PullRequest
4 голосов
/ 30 апреля 2019

Итак, у меня в настоящее время есть массив в Java, содержащий:

{"Sam has won", "Charles has lost", "Sam has lost"}

И при запуске мой JLabel отобразит «Сэм победил», как показано ниже:

Sam has won

Но я хочу иметь возможность обновлять JLabel автоматически один раз в час , переходя к "Чарльз проиграл". Следовательно, через час мой JLabel обновит свое содержимое следующим образом: обратите внимание, что для тестирования я позволю приложению запустить и подождать один час, чтобы увидеть метку обновлено , поскольку в нет специальной кнопки обновления , которую необходимо нажать для обновления, вместо этого нужно позволить приложению работать и обновляться самостоятельно ежечасно.

Charles has lost

и т. Д.

До сих пор я узнал о классе Timer и классе TimerTask , но мне трудно их различить. Может ли кто-нибудь продемонстрировать пример, основанный на моем сценарии выше?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Попробуйте использовать класс javax.swing.Timer.Вы можете проверить это так:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

public class Test extends JFrame {

    private int selectedNameIndex = 0;

    public Test() {
        JLabel label = new JLabel();
        List<String> nameList = new ArrayList<>();
        nameList.add("Sam has won");
        nameList.add("Charles has lost");
        nameList.add("Sam has lost");

        Timer timer = new Timer(60 * 60 * 1000, new ActionListener() {
//        Timer timer = new Timer(100, new ActionListener() { // for test
            public void actionPerformed(ActionEvent e) {
                label.setText(nameList.get(selectedNameIndex));
                selectedNameIndex++;
                if (selectedNameIndex >= nameList.size()) {
                    selectedNameIndex = 0;
                }
            }
        });
        timer.setInitialDelay(0);
        timer.start();
        add(label);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack(); setVisible(true);
    }

    public static void main(String[] args) {
        new Test();
    }
}
1 голос
/ 30 апреля 2019

Вы можете использовать javax.swing.Timer.Пример, вдохновленный статьей Фреда Шварца :

javax.swing.Timer t = new javax.swing.Timer(60 * 60 * 1000, new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              //Change your label's text
              p.repaint();
          }
       });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...