GridBagLayout in JPanel: Wie stelle ich es an das Komponenten im JPanel ...

mungoparks

Mitglied
Hallo @ all,

kurz vorneweg, ich habe alles zum Thema GridBagLayout hier im Forum gelesen das die Suchfunktion ausgeworfen hat. Leider
hat es meine Frage nicht gelöst.
Meine Frage bezüglich des GridBagLayout's(GBL) ist wie stelle ich es an das das GBL in einem JPanel
auch in der linken oberen Ecke des JPanels "beginnt" und nicht in der Mitte des JPanels.

Wenn ich z.B das GBL direkt an den Container gcp = getContentPane(); zuweise funktioniert es .
Aber mein Container muss ein CardLayout haben und eine dieser Karten enthält einen JPanel mit BorderLayout.
Im "North" diese JPanels ist ein weiterer JPanel mit GBL in dem verschieden Komponenten plaziert sind.
Das einzige Problem ist , das wie oben erwähnt diese KOmponeten nicht ab der oberen linken Ecke plaziert
werden, sondern "mittig".. Das GBL stimmt aber soweit d.h Die Komponenten sind im Verhältnis richtig angeordent
nur halt nicht ab der linken oberen Ecke des JPanel.
Wie kann ich es anstellen , das die Komponenten im JPanel
auch ab dem oberen linken Eck angeordnet werden wie
wenn ich sie direkt an dem Container gcp anbringe ?

Hoffe jemand hier weiss Rat.
Danke für alle Hinweise. Greetz
 
Hallo!

Mal ganz schnell und naiv... schieb doch einfach noch ein oder zwei "leere" ausreichend große JPanels als "Positionierungshilfe" in das JPanel mit dem GBL...

Gruß Tom
 
Hi Tom,

sorry, aber ich verstehe deinen Gedankengang nicht .
:confused:
Was bringt das? Blicke die Idee dahinter nicht.
Kann es leider erst heute Abend ausprobieren , da ich
gerade Arbeiten soll. Melde mich später.

Danke für deinen Ansatz.
greetz

..Hi Tom ,

habe gerade ein mini Beispiel hier gebastelt ,
jetzt verstehe ich was du meinst. bin nicht sicher ob es
für meine Applikation funktioniert, aber im "kleinen" siehts gut aus.
HERZLICHEN DANK

gruß
ivan
 
Zuletzt bearbeitet:
hey, kannst du mal bitte dein mini beispiel hier posten? - würde mich auch interessieren. Bzw. gibt es keine andere Möglichkeit, mit der man den Ursprung vom GBL in einem Panel nach oben links verlagern kann?

gruß
 
Hast du denn das Anchor Attribut gesetzt?

Java:
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
 
Zuletzt bearbeitet von einem Moderator:
hier mal ein code Beispiel

Code:
// private JPanel currentPanel;   
// Methoden, die zuvor via ActionListener aufgerufen wurden:
// this.remove(currentPanel);            
// this.add(currentPanel = new Einstellungen());

public Einstellungen()
{   
			//Komponenten
			JLabel header = new JLabel("Trainer Einstellungen");
			JLabel vname = new JLabel("Vorname: ");
			
			JTextField fvname = new JTextField();
			
			
			this.setBorder(javax.swing.BorderFactory.createTitledBorder("Einstellungen"));          
			this.setSize(new Dimension(640, 480));
			
			GridBagConstraints c = new GridBagConstraints();
			this.setLayout(new GridBagLayout());

			c.gridwidth = GridBagConstraints.REMAINDER;
			c.gridheight = 2;
			c.insets = new Insets(0, 5, 0, 5);
			add(header, c);
			
			c.gridwidth = GridBagConstraints.RELATIVE;
			c.gridheight = 1;
			c.anchor = GridBagConstraints.WEST;
			add(vname, c);
			c.gridwidth = GridBagConstraints.REMAINDER;
			c.fill = GridBagConstraints.HORIZONTAL;
			add(fvname, c);
}

und immer steht es in der mitte :) - warum?
 
Hallo,

falls das Problem noch besteht, versuch mal das:

Code:
			c.gridx=0;
			c.gridy=0;
			c.gridwidth = 2;
			c.gridheight = 1;
			c.weightx=0;
			c.weighty=0;
			c.fill = GridBagConstraints.HORIZONTAL;
			c.anchor = GridBagConstraints.NORTHWEST;
			c.insets = new Insets(0, 5, 0, 5);
			add(header, c);
			
			c.gridx=0;
			c.gridy=1;
			c.gridwidth = 1;
			c.gridheight = 1;
		       c.weightx=0;
			c.weighty=1;
			c.fill = GridBagConstraints.HORIZONTAL;
			c.anchor = GridBagConstraints.NORTHWEST;
			add(vname, c);

			
			c.gridx=1;
			c.gridy=1;
		        c.gridwidth = 1;
			c.gridheight = 1;
		        c.weightx=1;
			c.weighty=1;
			c.anchor = GridBagConstraints.NORTHWEST;
			c.fill = GridBagConstraints.HORIZONTAL;
			add(fvname, c);

Du musst immer die anteilige Weite (weightx oder weighty) der Komponenten angeben. Sonst wird der nichtgenutzte Platz gleichmäßig auf die Ränder des Panels verteilt und deine Komponenten in die Mitte des Panels gedrückt. (siehe auch http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html)

Gruß

Antje
 
Zuletzt bearbeitet:
Zurück