Разница между setSize() и setPreferredSize() в Java

Разница между  setSize() и setPreferredSize() немного сложен. Иногда мы используем setSize()  а иногда  setPreferredSize(). Иногда один удовлетворяет наши потребности, а другой нет, так что... В чем основное различие между этими двумя методами? Какой из них следует использовать для JFrame и JPanel?

Ответ: если у вашего компонента нет родителя, используйте setSize() который изменяет размер компонента, в противном случае используйте  setPreferredSize() и оба метода setMinimumSize() и setMaximumSize(). setPreferredSize() выбирает идеальный размер для компонента, layoutmanager попытается организовать правильное пространство для вашего компонента.

setSize()  ничего не делает, если родительский компонент использует диспетчер макетов, место, где setSize()  оказывает эффект  в компонентах верхнего уровня, таких как JFrame и JWindow. Звонить нужно: setSize()  Если у вас есть компоненты внутри родителя без менеджера макетов.

So,  setPreferredSize()  Вы должны поступить правильно, если у вас есть менеджер макетов, потому что большинство из них работают в  восстановление оптимального, минимального и максимального размера их компонентов. Использование setSize()  и  setLocation, чтобы расположить эти компоненты в соответствии с параметрами выбранного макета.

Example:

BorderLayout попытается установить границы северного региона равными размеру, указанному в  setPreferredSize()  своего северного региона. В конечном итоге он может быть больше, в зависимости от размера JFrame и размера размер других компонентов в соответствии с layout.

В заключение:
  • setPreferredSize()  вычисляет оптимальное расположение и размер компонента, если у вас есть layout.
  • Если у вас нет макета, то setSize()  Используется .