Am Ende des letzten Artikels über Gridbag-Layout stand ein Fenster, das dem gewünschten Ergebnis ähnlich sah, aber noch nicht funktionsfähig war. Dieses Mal wird das Fenster fertiggestellt.
Fill und Weight
Wenn man das Fenster vergrößert, das mit dem Code vom letzten Mal erzeugt wurde, bleiben die Komponenten in der Mitte des Fensters. Sie behalten auch ihre ursprüngliche Größe bei. Damit sich das ändert, müssen die Komponenten mit Fill- und Weight-Werten versehen werden.
Der Fill-Wert beschreibt, wie sich die Komponente verhält, wenn die Darstellungsfläche größer ist als die Komponente. Die weightx– und weighty-Werte bestimmen, wie überschüssiger vertikaler oder horizontaler Platz gefüllt werden soll.
Bei einem erneuten Blick auf das gewünschte Ergebnis sieht man, dass die Label, Combo-Boxen, Tasten und Textfelder am oberen Fensterrand unverändert bleiben. Der zusätzliche Platz wird von der Tabelle und dem Label mit dem Bild eingenommen.
Bevor man diesen Variablen Werte zuordnet, sollte man registrieren, dass die Tabelle und das Label mit dem Bild mit Rollbalken versehen sind. Daher müssen sie in einem JScroll-Pane untergebracht werden. Hier folgt der Code für die Tabelle. Er ist fast identisch mit dem für das Label.
JScrollPane scrollPane = new JScrollPane(resTable); scrollPane.setMinimumSize(new Dimension(450, 110)); .... gridbag.setConstraints(scrollPane, c); contentPane.add(scrollPane);
Als nächstes muss der verfügbare Platz gefüllt und die Rahmengröße vernünftig angepasst werden. Der folgende Code wird an die Tabelle und das Label mit dem Bild angefügt. Der fill-Wert müsste jedoch zurückgesetzt werden, wenn sich im Code eine Komponente zwischen den beiden befände.
c.fill = GridBagConstraints.BOTH;
Da die gegenwärtigen Abmessungen der Tabelle passend sind, muss sich eigentlich nur das Image-Label beim Verändern der Größe ausdehnen und zusammenziehen. Daher wird dem Image-Label folgender Code angefügt:
c.weightx = 1; c.weighty = 1;
Allerdings sagt dies nicht viel über das Weight-Element aus. Wenn in einem Gridbag-Layout Weight zugeordnet wird, muss es in jeder Zeile und Spalte 1 ergeben. Wenn die Tabelle sich vertikal auf der Hälfte des Labels mit dem Bild ausdehnen sollte, würde man den folgenden Code verwenden:
//For the JTable c.weighty = 0.33; //For the image label c.weighty = 0.67;
An dieser Stelle findet viel von dem „Voodoo“ statt, von dem bei Gridbag-Layout mitunter die Rede ist. Deswegen ist es günstig, eine Skizze des ursprünglichen Entwurfs anzufertigen. Sie ist besonders nützlich, um sich das Gitter beim Zuweisen von Werten für die Weight-Elemente bildlich vorzustellen. Es war noch nie von Vorteil, GUIs (grafische Benutzerschnittstellen) aufs Geratewohl zu programmieren. Bei Gridbag-Layout ist das erst recht so.
Die letzten Änderungen, die für das gewünschte GUI vorgenommen werden müssen, sind die Ausrichtung der tag– und tagmode-Label nach rechts und das Erzeugen von Zwischenräumen um diese Komponenten herum.
Die Ausrichtung ist leicht zu bewerkstelligen:
tagLbl.setHorizontalAlignment(SwingConstants.RIGHT); tagModeLbl.setHorizontalAlignment(SwingConstants.RIGHT);
Zum Erzeugen der Zwischenräume um die Komponenten herum werden Insets verwendet. Ein Inset gibt an, wie viel Zwischenraum sich an der Kante einer Komponente befindet. Die Parameter lauten oben, links, unten, rechts.
Das folgende Inset wird dem tag-Label zugeordnet:
c.insets = new Insets(5,5,5,15);
Es wird zurückgesetzt, sobald das Textfeld instantiiert wird. Dabei befindet sich das Inset auf dem tag-Label und dem tag-mode-Label:
c.insets = new Insets(0,0,0,0);
Und das war’s. Das GUI sollte nun das gewünschte Aussehen haben.
Erstmals liegen Preise für Verbraucher vor. Sie zahlen weniger als Geschäftskunden. Dafür beschränkt Microsoft den…
Die Entwickler arbeiten noch an weiteren „Verfeinerungen“. Windows Insider erhalten nun wohl eine erste Vorschau…
Laut Bitkom-Umfrage werden in jedem dritten Unternehmen in Deutschland private KI-Zugänge genutzt. Tendenz steigend.
2023 erlitten neun von zehn Unternehmen in der DACH-Region Umsatzverluste und Kurseinbrüche in Folge von…
Der Report „Pacific Rim“ von Sophos beschreibt Katz-und-Maus-Spiel aus Angriffs- und Verteidigungsoperationen mit staatlich unterstützten…
NVIDIA DGX SuperPOD soll voraussichtlich Mitte 2025 in Betrieb genommen und für Forschungsberechnungen genutzt werden.