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
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.
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.
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.
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 ...