web-dev-qa-db-fra.com

Java: Différence entre les méthodes setPreferredSize () et setSize () dans les composants

Ok, j'ai lu la Java Documentation et je n'arrive pas à comprendre quelle est la principale différence entre ces deux méthodes. Parfois, j'ai utilisé setSize() =, parfois setPreferredSize() , parfois l'un fait ce que je veux, parfois l'autre.

Alors, quelle est la principale différence entre les deux? Lequel devrais-je utiliser pour JFrames et JPanels?

Merci

99
David Robles

La réponse courte est: c'est compliqué.

La réponse un peu plus longue est la suivante: utilisez setSize() si le parent de votre composant n'a pas de gestionnaire de disposition, et setPreferredSize() et les éléments setMinimumSize et setMaximumSize associés, le cas échéant. .

setSize() ne fera probablement rien si le parent du composant utilise un gestionnaire de disposition; les endroits où cela aura généralement un effet concerneraient les composants de niveau supérieur (JFrames et JWindows) et les éléments situés à l'intérieur de scrolled panes. Vous devez également appeler setSize() si vous avez des composants dans un parent sans gestionnaire de présentation.

En règle générale, setPreferredSize() devrait faire ce qu'il faut si vous avez un gestionnaire de disposition; la plupart des gestionnaires de dispositions travaillent en obtenant les tailles préférées (ainsi que les tailles minimale et maximale) de leurs composants, puis en utilisant setSize() et setLocation() pour positionner ces composants conformément aux règles de la présentation. Ainsi (à titre d'exemple) un BorderLayout essaiera de rendre les limites de sa région "nord" égales au preferred size De sa composante nord - elles peuvent se retrouver plus grandes ou plus petites que cela, selon sur la taille du jframe, la taille des autres composants de la mise en page, etc.

112
Sbodd

setSize() ou setBounds() peut être utilisé lorsqu'aucun gestionnaire de disposition n'est utilisé.

Cependant, si vous utilisez un gestionnaire de disposition, vous pouvez fournir des astuces à l'aide de la méthode setXXXSize() telle que setPreferredSize() et setMinimumSize() etc.

Assurez-vous également que le conteneur du composant utilise un gestionnaire de disposition respectant la taille demandée. Les gestionnaires FlowLayout, GridBagLayout et SpringLayout utilisent la taille préférée du composant (les deux derniers en fonction des contraintes que vous avez définies), mais BorderLayout et GridLayout généralement pas. Si vous spécifiez de nouvelles indications de taille pour un composant déjà visible, vous devez y invoquer la méthode revalidate pour vous assurer que sa hiérarchie de confinement est à nouveau définie. Ensuite, appelez la méthode repaint.

10
Varun

setSize redimensionnera le composant à la taille spécifiée.

setPreferredSize définit la taille préférée. Le composant peut ne pas avoir cette taille, en fonction de la taille du conteneur dans lequel il se trouve ou si l'utilisateur redimensionne le composant manuellement.

5
Glen

IIRC ...

setSize définit la taille du composant.

setPreferredSize définit la taille préférée. Layoutmanager essaiera de ménager autant d’espace pour votre composant.

Cela dépend si vous utilisez un gestionnaire de disposition ou non ...

4
miku