Différence entre setSize() et setPreferredSize() en Java

La différence entre setSize() et setPreferredSize() est un peu compliquée. Parfois on utilise setSize() et parfois setPreferredSize(). Parfois une répond à nos besoins et l'autre non, alors quelle est la différence principale entre ces deux méthodes ? Laquelle doit-on utiliser pour JFrame et JPanel ?

La réponse est si votre composant n'a pas de parent, utilisez setSize() qui modifie la taille d'un composant sinon utilisez setPreferredSize() et les deux méthodes setMinimumSize() et setMaximumSize(). setPreferredSize() choisit la taille idéale pour un composant, le layoutmanager(gestionnaire de layout) va essayer d'arranger le bon espace à votre composant.

setSize() ne fait rien si le composant parent utilise un layout manager, l'endroit dont setSize() a un effet serait dans les composants de premier niveau comme JFrame et JWindow. Vous devez appeler setSize() si vous avez des composants à l'intérieur du parent sans un layout manager.

Donc, setPreferredSize() doit faire ce qu'il faut si vous avez un layout manager parce que la plupart d'eux marchent en récupérant la taille optimale, minimale et maximale de leurs composants. Utilisez setSize() et setLocation pour positionner ces composants selon les paramètres du layout choisi.

Exemple:

Un BorderLayout va essayer de mettre les bornes de la région nord égale au dimension spécifiée dans setPreferredSize() de sa région nord. Il peut se retrouver plus grand que cela en fonction de la taille de JFrame et la taille des autres composants selon la mise en page.

Comme conclusion:
  • setPreferredSize() calcule l'emplacement et la dimension optimale du composant si vous avez un layout.
  • Si vous n'avez pas un layout, c'est setSize() qui est utilisée.