Метод JTextField setText () не обновляет поле - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь обновить текст JTextField с помощью метода setText().Однако, когда я пытаюсь это сделать, кажется, ничего не происходит.Я прошел через отладчик и решил, что это действительно так.payField - это экземпляр JTextField, который я использую.

Вот код:

public void payBill(double payment) {

    if((this.bill - payment) > 0)
        payField.setText("Bill not completely paid! You still owe " + "$" + (this.bill - payment));
    else {
        payField.setText("Thank you for choosing Team Turbo!");//Not updating!
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        payFrame.setVisible(false);
        System.exit(0);
    }


}

Визуально, после вызова этого метода ничего не происходит:

enter image description here

Есть идеи, что здесь происходит?Весь графический интерфейс запускается в потоке SwingUtilities.invokeLater, просто для пояснения.

1 Ответ

0 голосов
/ 04 декабря 2018

Это ...

try {
    Thread.sleep(1500);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
payFrame.setVisible(false);
System.exit(0);

весьма подозрительно.

Swing - однопоточный API.То есть любая длительная или блокирующая операция будет препятствовать обновлению пользовательского интерфейса.

В вашем случае я мог бы рекомендовать вместо этого Swing Timer, который будет вызывать обратный вызов после указанной задержки, не блокируяПользовательский интерфейс.

Начните с рассмотрения Параллелизма в Swing и Как использовать Swing Timers для получения более подробной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...