Java: Unterschied zwischen den Methoden setPreferredSize () und setSize () in Komponenten
Ok, ich Lesen Sie die Java-Dokumentation und ich kann einfach nicht herausfinden, was ist der wesentliche Unterschied zwischen diesen beiden Methoden. Manchmal habe ich verwendet,setSize()
manchmal setPreferredSize()
manchmal, man tut, was ich will, manchmal das andere.
Also, was ist der wichtigste Unterschied zwischen den beiden? Welche soll ich verwenden für JFrames
und JPanels
?
Dank
InformationsquelleAutor der Frage David Robles | 2009-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort ist: es ist kompliziert.
Die etwas längere Antwort ist: verwenden Sie
setSize()
wenn Ihre Komponente Elternteil hat keinen layout-manager, undsetPreferredSize()
und seine verwandtensetMinimumSize
undsetMaximumSize
wenn es funktioniert.setSize()
wahrscheinlich nicht alles tun, wenn die Komponente parent mit einem layout-manager; in den Orten, die diese haben in der Regel ein Effekt wäre auf der top-level-Komponenten (JFrames
undJWindows
) und die Dinge, die innerhalb vonscrolled panes
. Sie müssen auch call -setSize()
wenn Sie haben Komponenten in einem übergeordneten, ohne layout-manager.Regel
setPreferredSize()
tun sollten, das "richtige" hast du ein layout-manager; in den meisten layout-Managern arbeiten, indem Sie die bevorzugte (sowie minimum und maximum) Größen Ihrer Komponenten, und dann mitsetSize()
undsetLocation()
zu positionieren dieser Komponenten entsprechend den layout-Regeln. Also (als Beispiel) einBorderLayout
wird versucht, die Grenzen seines "Nord" - region gleich diepreferred size
seiner Nord-Komponente - Sie können am Ende größer oder kleiner als, dass, abhängig von der Größe derjframe
die Größe der anderen Komponenten in das layout, und so weiter.InformationsquelleAutor der Antwort Sbodd
setSize()
odersetBounds()
kann verwendet werden, wenn kein layout-manager verwendet wird.Jedoch, wenn Sie mit einem layout-manager können Sie Hinweise zu den layout-manager über die
setXXXSize()
Methoden wiesetPreferredSize()
undsetMinimumSize()
etc.Und sicher sein, dass die Komponente im container verwendet ein layout-manager, der respektiert die angeforderte Größe. Die
FlowLayout
GridBagLayout
undSpringLayout
- Manager verwenden die Komponente bevorzugte Größe (die beiden letzteren je nach den Einschränkungen, die Sie festlegen), aberBorderLayout
undGridLayout
in der Regel nicht.Wenn Sie geben Sie die neue Größe-Hinweise für eine Komponente, die bereits sichtbar sind, müssen Sie zum aufrufen der revalidate-Methode auf, um sicherzustellen, dass die containment-Hierarchie gelegt wird, wieder aus. Rufen Sie dann die repaint-Methode.InformationsquelleAutor der Antwort Varun
setSize
wird die Größe der Komponente auf die angegebene Größe.setPreferredSize
stellt die gewünschte Größe ein. Die Komponente kann eigentlich nicht sein, das sich je nach Größe des Behälters ist es in, oder wenn der Benutzer die Größe neu, die Komponente manuell.InformationsquelleAutor der Antwort Glen
IIRC ...
setSize
setzt die Größe der Komponente.setPreferredSize
stellt die gewünschte Größe ein.Die Layoutmanager werden versuchen zu arrangieren, dass viel Raum für Ihre Komponente.
Es hängt davon ab, ob Sie über ein layout-manager ist oder nicht ...
InformationsquelleAutor der Antwort miku