110 votes

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

Ok, j'ai lu la Documentation de Java et je ne peux pas comprendre ce qui 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? Qui dois-je utiliser pour JFrames et JPanels?

Merci

126voto

Sbodd Points 3647

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

La réponse plus précise: utiliser setSize() si vos parent du composant n'a pas de gestionnaire de mise en page, et setPreferredSize() ses setMinimumSize et setMaximumSize si elle n'.

setSize() ne sera probablement pas faire quoi que ce soit si le parent du composant est à l'aide d'un gestionnaire de mise en page; les lieux ce sera généralement d'avoir un effet sur le haut niveau des composants (JFrames et JWindows) et les choses qui sont à l'intérieur de l' scrolled panes. Vous devez également appeler setSize() si vous avez des composants à l'intérieur d'un parent sans un gestionnaire de présentation.

En règle générale, setPreferredSize() devrait faire la "bonne chose" si vous avez un gestionnaire de mise en page; la plupart des gestionnaires de disposition de travail par l'obtention de l'privilégiées (minimum et maximum) tailles de leurs composants, et ensuite à l'aide d' setSize() et setLocation() à la position de ces composants en fonction de la disposition du règlement. Donc (par exemple) un BorderLayout va essayer de rendre les limites de son "nord" de la région de l'égalité à l' preferred size de sa composante nord - ils vont peut-être plus grand ou plus petit que cela, en fonction de la taille de l' jframe, la taille les autres éléments de la mise en page, et ainsi de suite.

10voto

Varun Points 680

setSize() ou setBounds() peut être utilisé en l'absence de gestionnaire de configuration est utilisé.

Toutefois, si vous utilisez un gestionnaire de présentation, vous pouvez fournir des conseils au gestionnaire de mise en page à l'aide de l' setXXXSize() méthodes comme setPreferredSize() et setMinimumSize() etc.

Et assurez-vous que le composant conteneur utilise un gestionnaire de présentation qui respecte la taille demandée. L' FlowLayout, GridBagLayout, et SpringLayout des gestionnaires à utiliser les composants préférés de la taille (les deux derniers en fonction des contraintes que vous définissez), mais BorderLayout et GridLayout n'est généralement pas le cas.Si vous spécifiez la nouvelle taille des conseils pour un composant qui est déjà visible, vous devez appeler la méthode revalidate sur lui pour s'assurer que son confinement de la hiérarchie est posée de nouveau. Ensuite invoquer la méthode repaint.

7voto

Glen Points 13521

``redimensionner le volet à la taille spécifiée.

``définit la taille par défaut. Le composant peut être pas réellement cette taille selon la taille du conteneur il se trouve, ou si l’utilisateur redimensionnées manuellement le composant.

5voto

miku Points 63392

IIRC...

``définit la taille du composant.

``définit la taille par défaut. Le Layoutmanager va essayer d’arranger ça beaucoup d’espace pour votre composant.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X