Ich sehe das anders als die übliche Antwort.
1) Sollte ich die Anwendung dieser Methoden vollständig vermeiden?
Niemals vermeiden! Sie sind dazu da, dem Layout-Manager die Größenbeschränkungen Ihrer Komponenten mitzuteilen. Sie können sie vermeiden, wenn Sie keinen Layout-Manager verwenden und versuchen, das visuelle Layout selbst zu verwalten.
Leider ist Swing nicht mit vernünftigen Standardabmessungen ausgestattet. Anstatt die Abmessungen einer Komponente festzulegen, ist es jedoch besser, Ihre eigene Komponente mit vernünftigen Standardwerten abzustufen. (In diesem Fall rufen Sie setXXX in Ihrer Nachfolgeklasse auf.) Alternativ können Sie die getXXX-Methoden überschreiben, um denselben Effekt zu erzielen.
2) Die Methoden wurden aus einem bestimmten Grund festgelegt. Wann sollte ich sie also verwenden? In welchem Zusammenhang? Für welche Zwecke?
Immer. Wenn Sie eine Komponente erstellen, legen Sie deren realistische Mindest-, Vorzugs- und Höchstgröße entsprechend der Verwendung dieser Komponente fest. Wenn Sie z. B. ein JTextField für die Eingabe von Ländersymbolen wie UK haben, sollte seine bevorzugte Größe so breit sein, dass zwei Zeichen hineinpassen (mit der aktuellen Schriftart usw.), aber wahrscheinlich ist es sinnlos, es noch größer werden zu lassen. Schließlich bestehen Ländersymbole aus zwei Zeichen. Wenn Sie dagegen ein JTextField für die Eingabe z.B. eines Kundennamens haben, kann es eine bevorzugte Größe haben, wie z.B. die Pixelgröße für 20 Zeichen, aber es kann größer werden, wenn die Größe des Layouts geändert wird, also setzen Sie die maximale Größe auf mehr. Gleichzeitig ist ein 0px breites JTextField sinnlos, also setzen Sie eine realistische Mindestgröße (ich würde sagen, die Pixelgröße von 2 Zeichen).
3) Was genau sind die negativen Folgen der Anwendung dieser Methoden?
(Ich kann nur daran denken, die 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 erfüllen kann.
Muss ich wirklich für jede kleine Variation in meinem Layout einen neuen LayoutManager implementieren?
Nein, definitiv nicht. Der übliche Ansatz besteht darin, verschiedene grundlegende Layout-Manager wie horizontales und vertikales Layout zu kaskadieren.
Zum Beispiel das folgende Layout:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
besteht aus zwei Teilen. Der linke und der rechte Teil sind ein horizontales Layout. 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 bei einem realen Layout schwierig werden. Deshalb sind rasterbasierte Layout-Manager wie MigLayout viel besser, wenn Sie etwas Ernsthaftes entwickeln wollen.
5) Wenn die Antwort auf Frage 4 "ja" lautet, führt dies nicht zu einer Vermehrung von LayoutManager-Klassen, die schwer zu pflegen sein werden?
Nein, Sie sollen auf keinen Fall Layout-Manager entwickeln, es sei denn, Sie brauchen etwas ganz Besonderes.
6) In einer Situation, in der ich Proportionen definieren muss...
zwischen den Kindern einer Komponente (z. B. Kind1 soll 10 % des Platzes einnehmen, Kind2 40 %, Kind3 50 %), ist es möglich, dies zu erreichen, ohne einen eigenen LayoutManager zu implementieren?
Wenn die bevorzugten Größen einmal richtig eingestellt sind, sollten Sie keine prozentualen Änderungen mehr vornehmen. Ganz einfach, weil Prozentsätze sinnlos sind (z.B. ist es sinnlos, ein JTextField 10% der Fenstergröße zu haben - da man das Fenster schrumpfen kann, so dass das JTextField 0px breit wird, oder man kann das Fenster erweitern, so dass das JTextField über zwei Displays in einem Multi-Display-Setup ist).
Aber manchmal kann man die Prozentsätze verwenden, um die Größe größerer Bausteine der Benutzeroberfläche (z. B. Panels) zu steuern.
Sie können JSplitPane verwenden, wo Sie das Verhältnis der beiden Seiten voreinstellen können. Oder Sie können MigLayout verwenden, mit dem Sie solche Beschränkungen in Prozent, Pixeln und anderen Einheiten festlegen können.