Всякий раз, когда я удаляю и добавляю компоненты Swing, скажем, из JPanel, должен ли я выполнять вызов при проверке или повторной проверке?
Удалить компонент Swing с помощью проверки или повторной проверки
Ответы (4)
revalidate()
в основном представляет собой invalidate()
, за которым следует validate()
.
Посмотрите на исходный код Sun Java.
Вы хотите позвонить revalidate()
.
invalidate()
, а затем validate()
, вы не получите тех же результатов, что и revalidate()
.
- person Jason S; 14.06.2011
revalidate() было бы лучше. revalidate() помечает весь контейнер до верхнего уровня как неправильный или недопустимый. Затем он вызывает validate() на верхнем уровне. Метод validate() родителя проверяет, не является ли хотя бы один из его непосредственных дочерних элементов недействительным или неправильным. он вызывает проверку родителя. поэтому вызов revalidate() автоматически означает вызов validate().
По крайней мере, в Java 7 revalidate()
не обязательно "стирает" удаленные компоненты с экрана. Я считаю, что это происходит, когда ограничивающая рамка сжимается. В этих случаях вызовите repaint()
после revalidate()
.
Я бы подумал, что revalidate() - это то, что вы хотите. Метод validate() будет автоматически вызываться после вызова revalidate(). См. Java API для JComponent.revalidate ().