Elemente verkleinern beim Fenster-Verkleinern

YelloW22

Erfahrenes Mitglied
hi,

was muss ich beim GridBagLayout bzw GridBagConstraints einstellen, damit meine Elemente im Fenster, wenn ich das Fenster kleiner ziehe, ihre Größe dementsprechend anpassen?
danke schon mal =)
 
Hallo YelloW22,
beim Hinzufügen der Componenten auf den Container mit dem GridBagLayout benutzt du einfach folgende Methode:
Java:
add(Component, GridBagConstraints);

GridBagConstraints-Objekte konstruierst du so:
Java:
new GridBagConstraints(int gridx, int, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady);
Weightx und Weigthy geben den Faktor an, um wie viel die Elemente in x- oder y-Richtung vergrößert werden (Werte 0.0 - 1.0 für 0 - 100%)
Fill gibt an, ob in keine nur in horizontale (x) oder vertikale (y) oder beide Richtungen vergrößert wird, was auch mit Weightx/y zusammenhängt (Mögliche Werte:

GridBagConstraints.
  • NONE
  • HORIZONTAL
  • VERTICAL
  • BOTH

Grüße,
kevin
 
Zum Thema GridBagConstraints und der Auswirkungen der am Fill beteiligten Attribute:

Voraussetzungen:
- das JPanel mit einem GridBagLayout entspricht in seinem Aufbau einem Schachbrettmuster, bei dem jedoch die einzelnen Zeilen und Spalten jeweils in ihren Ausmaßen variieren können.
- als Feld bezeichne ich im Weiteren also eine durch X- (gridx) und Y-Koordinaten (gridy) genau identifizierte Position in diesem Schachbrett

Das fill-Attribut beschreibt das Ausdehnungsverhalten des Elementes in seinem Feld:
  • fill = GridBagConstraints.NONE
    wie die Konstante nahe legt: die Größe des Elements entspricht seiner bevorzugten Größe - nicht mehr und nicht weniger
  • fill = GridBagConstraints.HORIZONTAL
    behält das NONE-Verhalten in der vertikalen Ebene, breitet sich aber horizontal auf die gesamte Breite seines Feldes aus
  • fill = GridBagConstraints.VERTICAL
    behält das NONE-Verhalten in der horizontalen Ebene, breitet sich aber vertikale auf die gesamte Breite seines Feldes aus
  • fill = GridBagConstraints.BOTH
    erweitert das Element auf die gesamte Höhe und Breite des Feldes im Grid

  • weightx
    Legt das Ausdehnungsgewicht der Breite der Spalte des Elements im übergeordneten GridBagLayout fest:
    Existieren keine weiteren gewichteten Elemente (weightx > 0) in anderen Spalten, dann ist der genaue Wert egal (Hauptsache er ist > 0). Der Effekt ist immer eine Ausdehnung über die gesamte restliche Breite, die nicht von den anderen Spalten eingenommen wird.
    Gibt es allerdings weitere gewichtete Elemente (weightx > 0) in anderen Spalten, dann ist jeweils das Verhältnis zwischen den einzelnen Werten zu betrachten. Hat Element1 ein weightx von 0.5 und Element2 ein weightx von 1, dann nimmt Element1 ein Drittel (0.5/(0.5 + 1)) der restlichen Breite ein und lässt die übrigen zwei Drittel (1/(0.5 + 1)) der restlichen Breite für Element2.
  • weighty
    Legt das Ausdehnungsgewicht der Höhe der Zeile des Elements im übergeordneten GridBagLayout fest:
    Existieren keine weiteren gewichteten Elemente (weighty > 0) in anderen Zeilen, dann ist der genaue Wert egal (Hauptsache er ist > 0). Der Effekt ist immer eine Ausdehnung über die gesamte restliche Höhe, die nicht von den anderen Zeilen eingenommen wird.
    Gibt es allerdings weitere gewichtete Elemente (weighty > 0) in anderen Zeilen, dann ist jeweils das Verhältnis zwischen den einzelnen Werten zu betrachten. Hat Element1 ein weighty von 50 und Element2 ein weighty von 150, dann nimmt Element1 ein Viertel (50/(50 + 150)) der restlichen Höhe ein und lässt die übrigen drei Viertel (150/(50 + 150)) der restlichen Höhe für das Element2.

Das nur um den möglicherweise irreführenden Kommentar zu korrigieren: ;)


Ich hoffe es hilft.
Viele Grüße
Carron
 
Zuletzt bearbeitet:
Zurück