LayoutManager GridBagLayout spielt verrückt

Luciferius

Mitglied
Folgendes Problem: Ich wollte mit dem GridBagLayoutManager mir ein Fenster aufbauen, wo ein Kästchen mit der unveränderbaren Größe 50*50 in der oberen rechten Ecke sitzt, welches von einem vertikalen und einem horizontalen Panel mit je fester Breite bzw. fester Höhe umgeben werden soll. Ich benutzte dazu die Hilfsfunktion aus dem Buch "Java ist auch eine Insel" (addComponent). es passiert nun folgendes: Das Kästchen ist alles andere als unveränderlich (beim ziehen des Fenster ändert sich ständig die Größe des Kästchens und auch das horizontale Kästchen will nicht so recht. Hier mal der Code dazu:
Java:
import java.awt.*;

import javax.swing.*;

class KSKB1 extends JFrame{
	
	public KSKB1(){
		GridBagLayout gbl = new GridBagLayout();
        JPanel mainPanel = new JPanel(gbl);
        this.setContentPane(mainPanel);
        this.setSize(400, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        JLabel horizontal = new JLabel();
		horizontal.setBackground(Color.black);
		horizontal.setOpaque(true);
		horizontal.setPreferredSize(new Dimension(0,10));
		horizontal.setMaximumSize(horizontal.getPreferredSize());
		//									  x  y  b  h ax  ay
		addComponent(mainPanel,gbl,horizontal,0, 1, 2, 1,1.0,0);
		
		JLabel vertikal = new JLabel();
		vertikal.setBackground(Color.black);
		vertikal.setOpaque(true);
		vertikal.setPreferredSize(new Dimension(10,0));
		vertikal.setMaximumSize(vertikal.getPreferredSize());
		//									 x    y   b h ax  ay
		addComponent(mainPanel,gbl,vertikal, 1,   0,  1,1,0, 1.0);
		
		JPanel kästchen = new JPanel();
		kästchen.setBackground(Color.white);
		kästchen.setOpaque(true);
		kästchen.setPreferredSize(new Dimension(50,50));
		kästchen.setMaximumSize(kästchen.getPreferredSize());
		//									x y b h ax ay
		addComponent(mainPanel,gbl,kästchen,0,0,1,1,0 ,0 );
		
		JPanel lower = new JPanel(gbl);
		JPanel right = new JPanel(gbl);
		addComponent(mainPanel,gbl,lower,0,2,3,1,1.0,1.0);
		addComponent(mainPanel,gbl,right,2,0,1,2,1.0,1.0);
	}
	
	static void addComponent(Container cont, GridBagLayout gbl, Component c, int x, int y,
            int width, int height, double weightx, double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        cont.add(c);
    }
	
	public static void main(String... args) {
        KSKB1 kskb = new KSKB1();
        kskb.setVisible(true);
    }
}

Liebe Grüße,

Luciferius
 

André Uhres

Top Contributor
Hallo Luciferius,

versuch's mal so:

Java:
//                                       x  y  b  h  wx  wy
addComponent(mainPanel, gbl, horizontal, 2, 1, 1, 1, 1.0, 0);

JLabel vertikal = new JLabel();
vertikal.setBackground(Color.black);
vertikal.setOpaque(true);
vertikal.setPreferredSize(new Dimension(10, 0));
vertikal.setMaximumSize(vertikal.getPreferredSize());
//                                     x  y  b h  wx  wy
addComponent(mainPanel, gbl, vertikal, 1, 2, 1, 1, 0, 1.0);

JPanel kästchen = new JPanel();
kästchen.setBackground(Color.white);
kästchen.setOpaque(true);
kästchen.setPreferredSize(new Dimension(50, 50));
kästchen.setMaximumSize(kästchen.getPreferredSize());
//                                     x  y  b  h wx wy
addComponent(mainPanel, gbl, kästchen, 1, 1, 1, 1, 0, 0);

JPanel lower = new JPanel(gbl);
JPanel right = new JPanel(gbl);
//                                  x  y  b  h  wx   wy
addComponent(mainPanel, gbl, lower, 1, 3, 3, 1, 1.0, 1.0);
addComponent(mainPanel, gbl, right, 3, 1, 1, 2, 1.0, 1.0);

Siehe auch: GridBagLayout - Byte-Welt Wiki

Gruß,
André
 

Luciferius

Mitglied
Danke für die Seite. Ich werde sie mir mal durchlesen, jedoch mein Problem ist damit immer noch nicht gelöst, da sich entweder die größe des Kästchens mitverändert oder die Größe der Ränder.
 

André Uhres

Top Contributor
kästchen dehnt sich bei mir nicht aus, horizontal dehnt sich horizontal aus, vertikal dehnt sich vertikal aus. So hatte ich es auch verstanden, dass du es machen willst.
 

Anhänge

  • gbl.jpg
    gbl.jpg
    9,4 KB · Aufrufe: 29
Zuletzt bearbeitet:

Luciferius

Mitglied
Nein, ich will, dass oben rechts in der Ecke das unveränderliche Kästchen ist, umgeben von den Panels "horizontal" und "vertikal", welche genau an dem Kästchen sein sollen und deren Größe ebenfalls unveränderlich ist. Der Rest des "mainPanels" soll mit den Panels "lower" und "rigt" dynamisch ausgefüllt werden, also das nur die Beiden sich bei anpassen des Bldschirmgröße ändern, "kästchen", "horizontal" und "vertikal" jedoch ihre Größe beibehalten.
Ich habe auch schon versucht mit der gbc.fill Option rumzuspielen, dann entstehen aber ungewollte Zwischenräume.
 

Anhänge

  • neu.jpg
    neu.jpg
    9,6 KB · Aufrufe: 28

L-ectron-X

Gesperrter Benutzer
Feste Größen musst du auch fest programmieren.
Dazu rufst du die Methoden setPreferredSize(), setMinimumSize() und setMaximumSize() mit den gleichen Werten an den unveränderlichen Komponenten auf.
 

André Uhres

Top Contributor
Java:
//                                       x  y  b  h  wx   wy
addComponent(mainPanel, gbl, horizontal, 0, 1, 2, 1, 0.0, 0.0);//<---------------
addComponent(mainPanel, gbl, vertikal,   1, 0, 1, 1, 0.0, 0.0);//<---------------
addComponent(mainPanel, gbl, kästchen,   0, 0, 1, 1, 0.0, 0.0);
addComponent(mainPanel, gbl, lower,      0, 2, 3, 1, 1.0, 1.0);
addComponent(mainPanel, gbl, right,      2, 0, 1, 2, 1.0, 0.0);//<---------------

Vor allem dürfen wir den Spalten und Zeilen, die ihre Größe nicht verändern sollen, auch kein Gewicht geben, also weightx=0.0 bei horizontal, weighty=0.0 bei vertikal und right ;).

Gruß,
André
 

Anhänge

  • gbl.png
    gbl.png
    6,3 KB · Aufrufe: 27
Zuletzt bearbeitet:

André Uhres

Top Contributor
wieso muss das Panel right in y-richtung kein Gewicht haben?

Der Layout-Manager setzt das Gewicht der Spalte / Zeile gleich dem maximalen Gewicht der Komponenten in dieser Spalte / Zeile (Siehe GridBagLayout - weightx, weighty).

Wenn demnach "right" zusätzlichen vertikalen Raum bekommen kann (mit weighty = 1.0), dann kann z.B. auch "horizontal" zusätzlichen vertikalen Raum erhalten, was wir ja vermeiden wollten. (Eigentlich erstreckt sich "right" über zwei Zeilen; der Layout-Manager muss demnach das Zeilengewicht einer der beiden Zeilen zuordnen und entscheidet sich anscheinend für die unterste Zeile, in der sich auch "horizontal befindet".)

Gruß,
Andre
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
H GridBagLayout macht mich wahnsinnig :-( AWT, Swing, JavaFX & SWT 5
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
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
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
Furtano AWT GridBagLayout macht mir Sorgen AWT, Swing, JavaFX & SWT 3
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
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
P Swing GridBagLayout bleibt nicht so wie es ist :( AWT, Swing, JavaFX & SWT 8
M gridbaglayout - abstand bei label und field AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben