2016-10-12 6 views
1

У меня возникли проблемы с перерисовкой JPanel на моем графическом интерфейсе со значениями по умолчанию.Panel.repaint(), кажется, не освежает панель

код я использую сейчас ниже, опять же, я не привык, и не очень хорошо осведомлен о Java кода, так что простите меня за что делает новобранец ошибки:

private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {           
    ... 

    pnlWagens1 = new pnlWagens(); 
    UpdateGUI(); 
}           

private void UpdateGUI(){ 
    pnlWagens1.repaint(); 
} 

До сих пор я вы попробовали вышеуказанный код, а также установили, что JPanel имеет значение null, перекрашивание, вставка нового экземпляра панели, повторная перекраска. Ничто так не было плодотворным, так как, в конце концов, я все еще придерживаюсь старой панели (и ее значений), отображаемой на моем графическом интерфейсе.

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

Любое понимание того, что я могу делать неправильно/без комментариев, было бы весьма полезно.

+1

Для лучшей помощи подумайте о создании и публикации [Минимальной, полной и проверенной примерной программы] (http://stackoverflow.com/help/mcve). Мы не хотим видеть всю вашу программу, но вы должны сконденсировать свой код на самый маленький бит, который все еще компилируется, не имеет дополнительного кода, который не имеет отношения к вашей проблеме, но все же демонстрирует вашу проблему. Вы можете очень хорошо решить проблему самостоятельно, просто пытаясь изолировать и выставить ошибку. –

+0

Чтобы перевести вышесказанное для краткости: я не вижу вашу ошибку в приведенном выше коде, предполагая, что код не показан. Сначала вы должны изолировать ошибку, отсюда необходимость в [mcve]. –

+0

Единственная возможная проблема заключается в том, что вы создаете новый объект pnlWagens, поэтому, возможно, вы не обновляете правильный, но трудно сказать. –

ответ

3

Предполагая, что это все соответствующий код (и что UpdateGUI не использует add или remove со ссылкой панели у вас есть там), а затем изменить то, что объект pnlWagens1 ссылается в местном классе не изменит ссылки на другие, которые до сих пор обратитесь к старому объекту. Старый объект pnlWagens1 по-прежнему ссылается на Swing в другом месте, с того момента, когда вы изначально называли add на каком-то контейнере.

Что вам нужно сделать, это removepnlWagens1 из контейнера, изменить pnlWagens1, как вы делаете сейчас, повторно addpnlWagens1 в контейнер, и вызвать затем вызвать как revalidate() и repaint() на контейнере.

+0

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

+0

@Yorrick Нет проблем. В Java ссылки передаются по значению, если вы вызываете метод и передаете ссылку, метод фактически получает копию ссылки. – NESPowerGlove

Смежные вопросы