webentwicklung-frage-antwort-db.com.de

Java: Unterschied zwischen den Methoden setPreferredSize () und setSize () in Komponenten

Ok, ich habe die Java Dokumentation gelesen und kann einfach nicht herausfinden, was der Hauptunterschied zwischen diesen beiden Methoden ist. Manchmal habe ich setSize() verwendet =, manchmal setPreferredSize() , manchmal macht einer was ich will, manchmal der andere.

Was ist der Hauptunterschied zwischen den beiden? Welches sollte ich für JFrames und JPanels verwenden?

Vielen Dank

99
David Robles

Die kurze Antwort lautet: Es ist kompliziert.

Die etwas längere Antwort lautet: Verwenden Sie setSize(), wenn das übergeordnete Element Ihrer Komponente keinen Layout-Manager hat, und setPreferredSize() und die zugehörigen setMinimumSize und setMaximumSize, wenn dies der Fall ist .

setSize() wird wahrscheinlich nichts tun, wenn das übergeordnete Element der Komponente einen Layout-Manager verwendet. Die Stellen, an denen dies normalerweise Auswirkungen hat, sind Komponenten der obersten Ebene (JFrames und JWindows) und Dinge, die in scrolled panes enthalten sind. Sie müssen auch setSize() aufrufen, wenn sich Komponenten in einem übergeordneten Element ohne Layout-Manager befinden.

In der Regel sollte setPreferredSize() das "Richtige" tun, wenn Sie einen Layout-Manager haben. Die meisten Layout-Manager ermitteln die bevorzugte (sowie die minimale und maximale) Größe ihrer Komponenten und positionieren diese Komponenten dann mit setSize() und setLocation() gemäß den Regeln des Layouts. Als Beispiel wird ein BorderLayout versuchen, die Grenzen seiner "Nord" -Region gleich dem preferred size Seiner Nordkomponente zu machen - je nachdem, ob sie größer oder kleiner sind von der Größe des jframe, der Größe der anderen Komponenten im Layout und so weiter.

112
Sbodd

setSize() oder setBounds() können verwendet werden, wenn kein Layout-Manager verwendet wird.

Wenn Sie jedoch einen Layout-Manager verwenden, können Sie dem Layout-Manager mithilfe der Methoden setXXXSize() wie setPreferredSize() und setMinimumSize() usw. Hinweise geben.

Stellen Sie sicher, dass der Container der Komponente einen Layout-Manager verwendet, der die angeforderte Größe berücksichtigt. Die Manager FlowLayout, GridBagLayout und SpringLayout verwenden die bevorzugte Größe der Komponente (die beiden letzteren hängen von den von Ihnen festgelegten Einschränkungen ab), aber BorderLayout und GridLayout normalerweise nicht. Wenn Sie neue Größenhinweise für eine Komponente angeben, die bereits sichtbar ist, müssen Sie die Revalidierungsmethode für diese Komponente aufrufen, um sicherzustellen, dass die Containment-Hierarchie erneut angelegt wird. Rufen Sie dann die Methode repaint auf.

10
Varun

setSize ändert die Größe der Komponente auf die angegebene Größe.

setPreferredSize legt die bevorzugte Größe fest. Die Komponente hat möglicherweise nicht diese Größe, je nach Größe des Containers, in dem sie sich befindet, oder wenn der Benutzer die Größe der Komponente manuell geändert hat.

5
Glen

IIRC ...

setSize legt die Größe der Komponente fest.

setPreferredSize legt die bevorzugte Größe fest. Der Layoutmanager versucht, so viel Platz für Ihre Komponente bereitzustellen.

Es hängt davon ab, ob Sie einen Layout-Manager verwenden oder nicht ...

4
miku