Обновление JLabel в JFrame - PullRequest
       85

Обновление JLabel в JFrame

0 голосов
/ 12 января 2020

Я искал вокруг этого сайта и целых rnet в течение нескольких часов, пытаясь выяснить, как решить эту проблему. Я создаю игру, и я впервые использую графику. Я выяснил, как создать JFrame, JPanel и JLabel, и единственная проблема, которую я не могу обойти, это обновление JLabel. Допустим, я начинаю это так:

JLabel testing = new JLabel ("blah", JLabel.CENTER);
testing.setAlignmentX(0);
testing.setAlignmentY(0);
frame.add(testing);

Я могу изменить текст после Thread.sleep(2500) с помощью testing.setText("hi");, но предыдущее состояние JLabel (которое говорит "бла") по-прежнему там. «Привет» просто появляется сверху. Я пробовал testing.setVisible(false); и многие другие вещи, но ничто не позволяет мне отобразить JLabel, спрятать его и затем изменить.

Есть идеи, что может быть не так? Спасибо

1 Ответ

1 голос
/ 13 января 2020

Не sleep или иным образом блокировать поток обработки событий AWT (EDT).

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

            javax.swing.Timer timer =
                new javax.swing.Timer(2500, event -> {
                    testing.setText("hi");
                });
            timer.setRepeats(false);
            timer.start();
...