Die meisten Layout-Manager haben keine Argument-Konstruktoren (das heißt, Sie können ein FlowLayout mit new FlowLayout ()
, ein GridLayout mit new GridLayout ()
, ein GridBagLayout mit new GridBagLayout ()
usw. erstellen). % Co_de% erfordert jedoch, dass Sie sowohl den zu verwaltenden Container als auch die Achse übergeben, auf der die Komponenten angeordnet werden sollen.
Meine Frage ist: Da Sie dem Layout-Manager bereits mitteilen, welche Komponente zu erstellen ist, müssen Sie
schreiben %Vor%statt nur die erste Zeile?
Ich habe einen kurzen Blick auf den BoxLayout
Quellcode geworfen Ich habe gesehen, dass der Konstruktor, den ich benutze (Zeilen 178-185), keinen Aufruf an BoxLayout
oder etwas Ähnliches macht. Es scheint so, als wäre es wirklich einfach, das einfach hinzuzufügen. Gibt es einen Grund, warum es nicht in der Swing-Bibliothek enthalten ist?
Wenn es darauf ankommt, verwende ich
Java-Version 1.7.0
Java (TM) SE Laufzeitumgebung (Build 1.7.0-b147)
auf Win7Pro.
Danke!
SSCCE:
%Vor% Der Container
muss existieren, bevor er an BoxLayout
übergeben werden kann. Normalerweise schreibt man so etwas:
Es ist verlockend, die letzten beiden Zeilen zu kombinieren, aber das Prinzip der geringsten Verwunderung legt nahe, dass der Konstruktor des Layouts den Status des Containers nicht ändern sollte.
Convenienly, javax.swing.Box
bietet "einen leichten Container, der verwendet ein BoxLayout
-Objekt als Layout-Manager. "
Jetzt macht eine einzelne Zeile:
%Vor% BoxLayout
stellt sicher, dass die Layout-Methoden auf den richtigen Container angewendet werden. Es wird erzwungen, dass derselbe Container, der im Konstruktor angegeben wurde, in verschiedenen Methoden verwendet wird, z. B. layoutContainer(Container target)
, preferredLayoutSize(Container target)
usw. Es läuft auf die Methode checkContainer()
hinaus, die die Verifizierung durchführt:
BoxLayout
implementation speichert wahrscheinlich einige Details über den Container und versucht, den Status beizubehalten, sodass er nicht geteilt werden kann.
BEARBEITEN:
BoxLayout
implementiert LayoutManager2 .invalidateLayout () , in dem die zwischengespeicherten Details zurückgesetzt werden. Andere Layout-Implementierungen folgen demselben Muster. Beispiel: GroupLayout und OverlayLayout benötigt ebenfalls Container-Argumente in ihren Konstruktoren.
Tags und Links java swing layout layout-manager boxlayout