Метод setText не обновляет JLabel, getText () возвращает правильную строку - PullRequest
0 голосов
/ 31 августа 2018

Я изо всех сил пытаюсь исправить это в течение 2 часов, но до сих пор ничего не произошло. Я попытался обновить JLabel несколькими методами, такими как revalidate, paintImmediately и т. Д., Хотя это не изменило окончательный результат.

public void notificationtos( ) {

    jLabel2.setText( "Read our ToS first, please." );
    jLabel2.revalidate();
    jLabel2.paintImmediately(jLabel2.getVisibleRect());
    System.out.println("debug" );
    System.out.println( jLabel2.getText() );
}


private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    if( prihvaceniuslovi == false ) {
        new notification().notificationtos();
        new notification().setVisible(true);
    }
}

Также при отладке, вот вывод из кода выше:

run:
debug
Read our ToS first, please.
BUILD SUCCESSFUL (total time: 3 seconds)

Графический интерфейс отображается нормально, но строка не изменяется по сравнению с той, которая была установлена ​​при инициализации JLabel.

Вместо этой строки, показанной на фотографии ... GUI Фото здесь

этот должен был быть показан

«Пожалуйста, сначала прочтите наши ТЗ».

Я был бы очень признателен, если бы кто-нибудь действительно мог мне помочь. Спасибо!

РЕДАКТИРОВАТЬ, вот код решения, большое спасибо @ camickr

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    if( prihvaceniuslovi == false ) {
        notification objekt = new notification();
        objekt.setVisible(true);
        objekt.notificationtos();
    }
}

1 Ответ

0 голосов
/ 31 августа 2018

Нет необходимости в repaint () или revalidate () или paintImmediately (). Все, что нужно, это вызвать метод setText ().

Если текст на рамке не изменяется, у вас есть две метки:

  1. Тот, который вы добавили в рамку и
  2. еще один, который просто сидит в памяти.

Проблема будет в следующем коде:

new notification().notificationtos();
new notification().setVisible(true);

Вы НЕ должны продолжать создавать новые экземпляры компонента. Компонент должен быть создан один раз, а затем вы сохраняете ссылку на переменную в своем классе, чтобы вы могли вносить изменения в компонент в будущем.

Прочтите раздел из учебника по Swing на Как использовать текстовые области . Он показывает, как вы можете продолжать добавлять текст в одну и ту же текстовую область. Вам нужно реструктурировать свой код, чтобы он был похож на демонстрационный пример.

...