Обновление содержимого окна после изменения содержимого

#java #swing

#java #swing

Вопрос:

У меня есть java-окно, в котором находятся различные компоненты. Когда пользователь выполняет действие, я хочу очистить поле, поместить в него другой набор компонентов, а затем представить поле пользователю. Поле является частью поля JDialog. Я могу очистить поле и повторно заполнить его, но на дисплее не отображается новое содержимое. Это просто пустое отображение (я предполагаю, отражающее тот факт, что я очистил содержимое поля). Я перерисовываю поле после того, как вставил новое содержимое, но в области, где находится поле, дисплей остается пустым. Как ни странно, если я сначала добавлю в поле границу линии, а затем перерисую ее, содержимое поля появится на экране. Это самое странное поведение. Есть идеи, почему это происходит и как обойти эту проблему?

Спасибо,

Эллиотт

Ответ №1:

Вы добавляете и удаляете содержимое из EDT? если это происходит не в том потоке, может возникнуть странное поведение перерисовки.

Также, возможно, захочется попробовать

 dialog.revalidate() 
  

если проблема не в вышеуказанном, вместо вызова repaint

Комментарии:

1. Поскольку это Jdialog, это должно быть dialog.validate(). Но да, это делает свое дело.

2. @Elliott: нет, повторная проверка правильна, но вы бы вызвали ее в ContentPane JDialog после приведения ее к JPanel. ((JPanel)dialog.getContentPane()).revalidate(); было бы неплохо. 1 к meverett.