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

Ok, je lis la documentation Java 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 on fait ce que je veux, parfois l’autre.

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

Merci

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

La réponse légèrement plus longue est la suivante: utilisez setSize() si le parent de votre composant ne possède pas de gestionnaire de disposition, et setPreferredSize() et ses setMinimumSize et setMaximumSize si c’est le cas.

setSize() ne fera probablement rien si le parent du composant utilise un gestionnaire de disposition; les endroits qui ont généralement un effet seraient sur les composants de niveau supérieur ( JFrames et JWindows ) et sur les éléments situés à l’intérieur des scrolled panes . Vous devez également appeler setSize() si vous avez des composants dans un parent sans gestionnaire de disposition.

En règle générale, setPreferredSize() devrait faire la “bonne chose” si vous avez un gestionnaire de disposition; La plupart des gestionnaires de mise en page fonctionnent en obtenant les tailles préférées (ainsi que minimum et maximum) de leurs composants, puis en utilisant setSize() et setLocation() pour positionner ces composants conformément aux règles de la mise en page. Ainsi, par exemple, un BorderLayout va essayer de rendre les limites de sa région “nord” égales à la preferred size de sa composante nord – elles peuvent être plus grandes ou plus petites que cela, en fonction de la taille du jframe , de la taille des autres composants de la mise en page, etc.

setSize() ou setBounds() peuvent être utilisés lorsqu’aucun gestionnaire de disposition n’est utilisé.

Toutefois, si vous utilisez un gestionnaire de disposition, vous pouvez fournir des conseils au gestionnaire de disposition à l’aide des méthodes setPreferredSize() telles que setPreferredSize() et setMinimumSize() etc.

Et assurez-vous que le conteneur du composant utilise un gestionnaire de disposition qui respecte 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 définies), mais BorderLayout et GridLayout ne le font généralement pas. Si vous spécifiez de nouveaux indicateurs de taille pour un composant déjà visible, vous devez invoquez la méthode de revalidation pour vous assurer que sa hiérarchie de confinement est à nouveau configurée. Invoquez ensuite la méthode de repeindre.

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

setPreferredSize définit la taille préférée. Le composant n’est peut-être pas réellement de cette taille en fonction de la taille du conteneur dans lequel il se trouve ou si l’utilisateur a redimensionné le composant manuellement.

IIRC …

setSize définit la taille du composant.

setPreferredSize définit la taille setPreferredSize . Le Layoutmanager essaiera d’organiser autant d’espace pour votre composant.

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