GridBagLayout macht mich wahnsinnig :-(

HarryR

Mitglied
Hallo Leute,

folgender einfacher Code soll zwei (gleichgroße) recheckige JFrames in einem JFrame erzeugen.
Damit man was sieht habe ich die Hintergründe eingefärbt:
Java:
public void addComponentsToPane(Container pane)
{
  // pane =     JFrame
  pane.setLayout(new GridBagLayout());
  pane.setBackground(Color.cyan);
  GridBagConstraints c = new GridBagConstraints();

            
   JPanel left = new JPanel();
   left.setBackground(Color.green);
   c.gridx = 0;
   c.gridy = 0;
            
   pane.add(left,c);       

            

   JPanel right = new JPanel();
   right.setBackground(Color.red);

   c.gridx = 1;
   c.gridy = 0;
   pane.add(right,c);
}

Was dabei herauskommt seht ihr im Screenshot, eine cyan-Fläche

Erwartet habe ich eine grüne Fläche links, eine rote rechts ..

Was mache ich falsch, so schwer ist das doch nicht, oder ?


Viele Grüße
 

Anhänge

  • GridBagLayout-Demo.png
    GridBagLayout-Demo.png
    12,9 KB · Aufrufe: 0

LimDul

Top Contributor
Das Problem dürfte sein, dass standardmäßig kein Fill und weigthx/y gesetzt ist.

Standardmäßig skalieren die Elemente nicht und der verbleibende Platz wird am Rand zugeschlagen. Siehe: https://docs.oracle.com/javase/7/docs/api/java/awt/GridBagLayout.html
Used to determine how to distribute space, which is important for specifying resizing behavior. Unless you specify a weight for at least one component in a row (weightx) and column (weighty), all the components clump together in the center of their container. This is because when the weight is zero (the default), the GridBagLayout object puts any extra space between its grid of cells and the edges of the container.
Wenn du willst, dass der Platz gleichmäßig verteilt wird, weise der Constraint bei weigthx und weightx den gleichen Wert (z.B. 1.0) zu und fill den Wert GridBagConstraints.BOTH damit auch in beide Richtungen (horizontal / vertikal) skaliert wird.
 

Jw456

Top Contributor
Du willst doch eigentlich dem Layout etwas hinzufügen und nicht dem pane.
Von dem Layout hast du keine Variable. Um dem was hinzuzufügen.
 

Neumi5694

Top Contributor
Du willst doch eigentlich dem Layout etwas hinzufügen und nicht dem pane.
Von dem Layout hast du keine Variable. Um dem was hinzuzufügen.
Nein, das macht er schon richtig so. Hierzu muss noch gesagt werden, dass es hier um LayoutMANAGER geht.

Demit beiden den selben Flächen gleich groß inwerden, müssen beide das selbe Gewicht >0 in X haben. Sie müssen außerdem ein Gewicht in y haben. Dieses darf sich unterscheiden, da hier sonst nichts vorhanden ist. Zu guter Letzt Außerdem musst du ihnen noch sagen, dass sie die reservierte Fläche füllen sollen.
Java:
    public static void addComponentsToPane(Container pane) {
        // pane =     JFrame
        pane.setLayout(new GridBagLayout());
        pane.setBackground(Color.cyan);
        GridBagConstraints c = new GridBagConstraints();

        JPanel left = new JPanel();
        left.setBackground(Color.green);
        c.gridx = 0;
        c.gridy = 0;
        c.weightx = 1;
        c.weighty = 1;
        c.fill = GridBagConstraints.BOTH;

        pane.add(left, c);
        JPanel right = new JPanel();
        right.setBackground(Color.red);

        c.gridx = 1;
        pane.add(right, c);
    }

Das hier ist übrigens einer der Fälle, wo ich GridBagLayout NICHT empfehlen würde. Abhängig vom Inhalt dieser beiden Flächen können sie nämlich verschieden groß werden. Das hier ist ein Beispiel, wo das GridLayout besser wäre, da es Breite und Höhe in fixe Bereiche einzeilt, unabhängig vom Inhalt.
Java:
    public static void addComponentsToPane2(Container pane) {
        pane.setLayout(new GridLayout(0, 2));

        JPanel left = new JPanel();
        left.setBackground(Color.green);
        pane.add(left);

        JPanel right = new JPanel();
        right.setBackground(Color.red);
        pane.add(right);
    }
 

Neumi5694

Top Contributor
ps: Gewichte und / oder Breiten lassen sich übrigens auch über den Layoutmanager selbst setzen, dann muss man es nicht für alle Komponenten einzeln machen.
Hier ein Beispiel für das Layout einer einfachen Konfigurationsliste. Abstand oben und links = 14 Pixel, der Text hat dann eine Mindestbreite von 250, die dritte Spalte beinhaltet die Eingabedaten, füllt die gesamte Restbreite aus. Rechts wird dann nochmal ein Abstand von 14 gehalten.
Beim Design muss man jetzt nur noch die Komponenten in die richtige Spalte setzen (beginnend mit Zeile 1) und sie linksbündig ausrichten.
Java:
        GridBagLayout gbl = new GridBagLayout();
        gbl.columnWidths = new int[]{14, 250, 0, 14}; //die zweite Spalte mit den Texten hat eine fixe Breite, es sei denn, die Texte sind länger, dann wird sie automatisch verbreitert.
        gbl.columnWeights = new double[]{0, 0, 1};//die dritte Spalte schnappt sich in der Breite alles, was nicht reserviert ist.
        gbl.rowHeights = new int[]{14}; //Die erste Zeile ist fix 14 Pixel groß, um oben einen Abstand zu haben.
        pane.setLayout(gbl);

        //ganz unten sollte noch ein Filler eingefügt werden, der den übrigen Platz einnimmt und eine Mindesthöhe von 14 hat, damit man auch hier garantiert einen Abstand hat.
Komponenten können natürlich auch mehr als eine Spalte oder Zeile einnehmen, man kann sie auch so konfigurieren, dass sie bis ganz nach rechts oder bis zur nächsten Komponente in der selben Zeile gehen. Viel Spaß beim Experimentieren.

Falls du irgendwann mal begreifst, wie man anständig mit "Internal Paddings" (ipadx,ipady des GridbagConstraints) arbeitet, hast du mehr verstanden als ich. Ich lass die immer auf 0, verwende insets zum Vergrößern der Fläche, welche durch eine Komponente eingenommen wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
Furtano AWT GridBagLayout macht mir Sorgen AWT, Swing, JavaFX & SWT 3
D GridBagLayout macht nicht das was es soll AWT, Swing, JavaFX & SWT 12
O Swing GridBagLayout in Größe anpassen AWT, Swing, JavaFX & SWT 6
S GridBagLayout Felder formatieren AWT, Swing, JavaFX & SWT 1
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
C GridbagLayout verstehen lernen AWT, Swing, JavaFX & SWT 1
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
CptK Positionieren von Elementen in GridBagLayout AWT, Swing, JavaFX & SWT 4
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
Mario1409 AWT GridBagLayout AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
T GridBagLayout Anfängerprobleme AWT, Swing, JavaFX & SWT 3
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
M Gridbaglayout Spaltenbreite AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
V GridBagLayout AWT, Swing, JavaFX & SWT 4
N LayoutManager GridBagLayout - Grundlagen AWT, Swing, JavaFX & SWT 6
Neumi5694 Swing Gridbaglayout - automatische Anpassung verhindern AWT, Swing, JavaFX & SWT 1
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
M Swing GridBagLayout Komponentengröße festsetzen AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
HarleyDavidson Swing Seltsames Verhalten GridBagLayout AWT, Swing, JavaFX & SWT 11
W GridBagLayout mit fester Zellgrösse AWT, Swing, JavaFX & SWT 2
N Swing GridBagLayout: Ein Pixel Versatz AWT, Swing, JavaFX & SWT 2
B Swing Gridbaglayout unterschiedliche Zeilenhöhe AWT, Swing, JavaFX & SWT 6
H LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 1
N GridBagLayout - was fehlt? AWT, Swing, JavaFX & SWT 8
S Swing rowHeight und rowWeight im GridBagLayout AWT, Swing, JavaFX & SWT 1
N Swing GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 4
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
G GridBagLayout AWT, Swing, JavaFX & SWT 6
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
T LayoutManager GridBagLayout / erwartetes Raster fehlt AWT, Swing, JavaFX & SWT 3
X Gridbaglayout gridx + gridy auslesen? AWT, Swing, JavaFX & SWT 7
N GridBagLayout - Zeitplan AWT, Swing, JavaFX & SWT 13
N Swing GridbagLayout AWT, Swing, JavaFX & SWT 4
S Swing gridbaglayout AWT, Swing, JavaFX & SWT 8
G GridBagLayout Problem AWT, Swing, JavaFX & SWT 4
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
X LayoutManager gridBagLayout wird nicht richtig Dargestellt AWT, Swing, JavaFX & SWT 5
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
N LayoutManager GridBagLayout schummeln erlaubt ? AWT, Swing, JavaFX & SWT 2
D GridBagLayout AWT, Swing, JavaFX & SWT 9
A Swing GridBagLayout - constraints.anchor scheint nicht korrekt zu funktionieren? AWT, Swing, JavaFX & SWT 7
J Swing Terminkalender Wochenansicht mit Gridbaglayout oder JTable AWT, Swing, JavaFX & SWT 16
C LayoutManager GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 5
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
R GridBagLayout in GridBagLayout AWT, Swing, JavaFX & SWT 2
H Positionierungsprobleme beim GridBagLayout AWT, Swing, JavaFX & SWT 16
A GridbagLayout positionierungsproblem AWT, Swing, JavaFX & SWT 4
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
D JTable im GridBagLayout -> gridwidth AWT, Swing, JavaFX & SWT 6
T GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
D Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 8
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
B GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 11
E LayoutManager GridBagLayout in BorderLayout - Abstand bei Resizing AWT, Swing, JavaFX & SWT 2
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
N GridBagLayout Problem AWT, Swing, JavaFX & SWT 6
C Swing JTable "zerstört" GridBagLayout AWT, Swing, JavaFX & SWT 9
N LayoutManager GridBagLayout Größe fixieren AWT, Swing, JavaFX & SWT 3
M GridBagLayout AWT, Swing, JavaFX & SWT 7
V Swing Gridbaglayout Leeres Fenster AWT, Swing, JavaFX & SWT 2
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
N GridBagLayout AWT, Swing, JavaFX & SWT 11
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
Y Swing GridbagLayout JTextfield zu klein AWT, Swing, JavaFX & SWT 5
L LayoutManager GridBagLayout spielt verrückt AWT, Swing, JavaFX & SWT 9
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
J Java GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 3
Y LayoutManager Problem mit Gridbaglayout AWT, Swing, JavaFX & SWT 8
hdi LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 9
W GridBagLayout Falsche Größenanpassung AWT, Swing, JavaFX & SWT 6
R Swing Button-Größe in JPanel mit GridBagLayout nicht änderbar AWT, Swing, JavaFX & SWT 3
E Problem mit meiner GUI/GridbagLayout AWT, Swing, JavaFX & SWT 2
M LayoutManager GradientPaint auf GridBagLayout AWT, Swing, JavaFX & SWT 5
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
G LayoutManager per Button GridBagLayout + Inhalt ändern AWT, Swing, JavaFX & SWT 2
M GridBagLayout zeilenweise füllen AWT, Swing, JavaFX & SWT 5
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
hdi Swing Problem mit GridBagLayout AWT, Swing, JavaFX & SWT 2
E LayoutManager GridBagLayout kurz vorm Wahnsinn! AWT, Swing, JavaFX & SWT 22

Ähnliche Java Themen

Neue Themen


Oben