как выбрать между JComponent.revalidate и Container.validate - PullRequest
1 голос
/ 19 октября 2011

Я использую WindowBuilder и Swing. На Swing JPanel я выполняю следующее:

java.awt.Container.setLayout()
java.awt.Container.removeAll()
java.awt.Container.add()

Чтобы закончить, я призываю:

java.awt.Container.validate() но я заметил, что javax.swing.JComponent.revalidate(), кажется, делает то же самое на практике. Я не заметил никакой разницы в поведении. JPanel наследуется как от Container, так и от JComponent. Как выбрать между ними?

1 Ответ

1 голос
/ 19 октября 2011

3 важных отличия:

  • JComponent#revalidate() сначала делает недействительным компонент, чего не делает Container#validate().
  • JComponent#revalidate() не проверяет сразу, он добавляет компонент в список недопустимых компонентов, а RepaintManager проверяет компоненты в пакетном режиме. Это может улучшить производительность, когда требуется много проверок.
  • JComponent#revalidate() можно вызывать из любого потока, а не только из потока диспетчеризации событий.

Если вам не нужен немедленный эффект (который необходим только в особых ситуациях), JComponent#revalidate() предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...