Ich sehe es anders als die akzeptierte Antwort.
1) Sollte ich die Verwendung dieser Methoden vollständig vermeiden?
Niemals meiden! Sie dienen dazu, dem Layout-Manager die Größenbeschränkungen Ihrer Komponenten auszudrücken. Sie können sie vermeiden, wenn Sie keinen Layout-Manager verwenden, und versuchen, das visuelle Layout selbst zu verwalten.
Leider wird Swing nicht mit angemessenen Standardabmessungen geliefert. Anstatt die Abmessungen einer Komponente festzulegen, ist es jedoch besser, die eigene Komponente mit angemessenen Standardeinstellungen herabzusetzen. (In diesem Fall rufen Sie setXXX in Ihrer Nachkommenklasse auf.) Alternativ können Sie die getXXX-Methoden für denselben Effekt überschreiben.
2) Die Methoden wurden aus einem bestimmten Grund definiert. Wann sollte ich sie verwenden? In welchem Kontext? Für welche Zwecke?
Immer. Wenn Sie eine Komponente erstellen, legen Sie ihre realistische minimale / bevorzugte / maximale Größe entsprechend der Verwendung dieser Komponente fest. Wenn Sie beispielsweise ein JTextField für die Eingabe von Ländersymbolen wie UK haben, muss seine bevorzugte Größe so breit sein, dass zwei Zeichen (mit der aktuellen Schriftart usw.) passen. Wahrscheinlich ist es jedoch bedeutungslos, es größer werden zu lassen. Ländersymbole sind schließlich zwei Zeichen. Wenn Sie dagegen ein JTextField zur Eingabe eines Kundennamens haben, kann es eine bevorzugte Größe wie die Pixelgröße für 20 Zeichen haben, kann jedoch größer werden, wenn die Größe des Layouts geändert wird. Stellen Sie daher die maximale Größe auf mehr ein. Gleichzeitig ist es sinnlos, ein 0px breites JTextField zu haben. Legen Sie daher eine realistische Mindestgröße fest (ich würde sagen, die Pixelgröße beträgt 2 Zeichen).
3) Was genau sind die negativen Folgen dieser Methoden?
(Ich kann mir nur vorstellen, Portabilität zwischen Systemen mit unterschiedlicher Bildschirmauflösung hinzuzufügen).
Keine negativen Folgen. Dies sind Hinweise für den Layout-Manager.
4) Ich glaube nicht, dass ein LayoutManager alle gewünschten Layoutanforderungen genau erfüllen kann.
Muss ich wirklich für jede kleine Variation meines Layouts einen neuen LayoutManager implementieren?
Nein, definitiv nicht. Der übliche Ansatz besteht darin, verschiedene grundlegende Layoutmanager wie das horizontale und das vertikale Layout zu kaskadieren.
Zum Beispiel das folgende Layout:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
hat zwei Teile. Der linke und der rechte Teil sind horizontal angeordnet. Der rechte Teil ist ein JPanel, das dem horizontalen Layout hinzugefügt wurde, und dieses JPanel hat ein vertikales Layout, das die Schaltflächen vertikal anordnet.
Natürlich kann dies mit einem realen Layout schwierig werden. Daher sind gitterbasierte Layout-Manager wie MigLayout viel besser, wenn Sie etwas Ernstes entwickeln möchten.
5) Wenn die Antwort auf 4 "Ja" lautet, führt dies dann nicht zu einer Zunahme von LayoutManager-Klassen, deren Wartung schwierig wird?
Nein, Sie sollten definitiv keine Layout-Manager entwickeln, es sei denn, Sie benötigen etwas ganz Besonderes.
6) In einer Situation, in der ich Proportionen definieren muss ...
Ist es zwischen Kindern einer Komponente (z. B. Kind1 sollte 10% des Speicherplatzes verwenden, Kind2 40%, Kind3 50%) möglich, dies zu erreichen, ohne einen benutzerdefinierten LayoutManager zu implementieren?
Sobald die bevorzugten Größen richtig eingestellt sind, möchten Sie möglicherweise nichts mehr in Prozent tun. Einfach, weil Prozentsätze sinnlos sind (z. B. ist es sinnlos, ein JTextField zu haben, das 10% der Fenstergröße beträgt - da man das Fenster verkleinern kann, sodass JTextField 0 Pixel breit wird, oder das Fenster so erweitern kann, dass sich das JTextField über zwei Anzeigen auf einem befindet Multi-Display-Setup).
Möglicherweise verwenden Sie die Prozentsätze jedoch, um die Größe größerer Bausteine Ihrer GUI (z. B. Panels) zu steuern.
Sie können JSplitPane verwenden, wo Sie das Verhältnis der beiden Seiten voreingestellt haben. Sie können auch MigLayout verwenden, mit dem Sie solche Einschränkungen in Prozent, Pixeln und anderen Einheiten festlegen können.
JEditorPane
mit HTML, das selbst keine Breite vorschlägt. OTOH Ich bin mir nicht sicher, ob ich etwas verpasst habe. Ich werde die Antworten auf den Thread sorgfältig prüfen, war aber interessiert, wenn Sie Kommentare hatten, insbesondere zu letzterem Fall.