#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.