GridBagLayout

K

Killit

Gast
Yoho,

ihr Lieben. Ich bin es mal wieder ;D

Hab mich mittlerweile zum GridBagLayout vorgearbeitet und stoße wieder auf Hürden.

Mir erschließt sich gerade nicht ganz die Verwendung von gridwidth und weightx / weighty;

Mein Programm scheint ziemlich statisch und ändert sich kaum bei Eingabe:

Java:
import javax.swing.*;
import java.awt.*;


public class Grafik extends JFrame {

	private JLabel  name;
	private JLabel  eingabe;
	private JTextField eingabefeld;
	private JButton ok;
	private JTextArea ausgabe;
	
	
	public Grafik (){
		
		this.setLayout(new GridBagLayout());
		this.setVisible(true);
		this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
		GridBagConstraints c = new GridBagConstraints();
	  
	    name = new JLabel ("Programm");
	    eingabe = new JLabel("Eingabe:");
	    eingabefeld = new JTextField(20);
	    ok = new JButton("ok");
	    ausgabe = new JTextArea(20,20);
	    
	    
	    
	    c.insets = new Insets(5,5,5,5);
	    c.anchor = GridBagConstraints.WEST;
	    add(eingabe,c);
	    
	    c.gridwidth = GridBagConstraints.REMAINDER;
	    c.weightx = 1;
	    c.fill = GridBagConstraints.HORIZONTAL;
	    add(eingabefeld,c);
	    
	    c.gridwidth = 3;
	    c.weightx = 0;
	    add(ok,c);
	    
	    c.weightx = 1;
	    c.weighty = 3;
	    c.fill = GridBagConstraints.HORIZONTAL;
	    add(ausgabe,c);
	    
	    
	    
	    
	
	}
	
	
	public static void main(String[] args){
		
		Grafik x = new Grafik();
		x.setSize(300,300);
	}
	
}


Hier ein Ausschnitt aus einem Code, den ich gerade regelmäßig änder um die Wirkung zu testen.
Grad hab ich mal weighty auf 3 gesetzt, weil in der Beschreibung steht:

Spezifies how to distribute extra vertical space...

Jetzt dachte ich, dass sich mein Area nach unten ziehen müsste. Also quasi in die laenge und breite um 3 Felder von Y nach unten. Hatte zu dem TestBeispiel das Area extra auf 50,50 gemacht.
Stattdessen verschiebt sich die row von "ok" und dem Area um 3 von der ersten row.
Wobei meine Area sich in der Größe auch nicht ändert sonder statisch bleibt.

Außerdem check ich gridwidth nicht xD es scheint das tun zu wollen, was ich eigentlich mit weigthx
erreiche.
Spezifies the numbers of cells in a row for components display area...


Ich dachte das funktioniert wie ein Koordinatensystem:

0 1 2 3 4 5 ...
0
1
2
3
4
5

und das ich dann mit weigthx z.B.: das x festlege und mit weigthy das y, aber diese Punkte
scheinen überhaupt keinen Einfluss zu haben auf die Position,
also füge ich mit add(element, T ) qausi in einer Reihenfolge hinzu die immer von links nach
rechts abläuft?
Irgendwie ist das alles recht komisch grad :p
 

diggaa1984

Top Contributor
GridBagLayout ist schon ne recht komplexe Sache, die ein wenig Übung Bedarf .. ich hab da ne methode, in der ich alles nötige immer übergebe

Java:
private void addGblComponent(Container cont, Component c, int x, int y, int width, 
								 int height, double weightx, double weighty, int fill,
								 Insets insets){
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbc.fill = fill;
        gbc.insets = insets;
        cont.add(c, gbc);
    }//addGblComponent

x und y entsprechen den Zellen wie du es dir vorstellst, (0,0) ganz oben links.

width und heigth geben die Anzahl an Zellen an, die die Komponente in dem Koordinatensystem einnimmt (also x=0 y=0 width=2 heigth=1 .. würde deine Komponente von (0,0) bis einschliesslich (0,1))

weightx und weighty definieren das verhalten der Komponente, wenn du zB. das Fenster in dem sie sich befindet vergrößerst. Dadurch hast du mehr Platz, welcher dann auf alle Komponenten des Layouts verteilt wird. Diese 2 Werte geben nun an wie sich die einzelnen Komponenten den Platz teilen.

mit fill kannst du festlegen ob die Komponenten horizontal, vertikal oder in beide Richtungen ausgedehnt werden kann, oder eben gar nicht.

Insets kannst du nutzen um Abstände um eine Komponente herum zu definieren.

dann gibts noch anchor, welches dir ermöglicht die Komponente in ihrer Zelle auszurichten (in den ecken, zentral oder an dem mittelpunkten der zellenkanten. Anchor fehlt hier noch in der methode :D
 
F

Firephoenix

Gast
Hi,
meistens ist das GridBag sowieso ein totaler Overkill :)
entweder es ist so einfach, dass man die Components mit einer sinnvollen Schachtelung von Border, Grid oder Flow in den Griff bekommt, oder man werkelt so lange mit Pixelabständen herum, dass man gleich bei einem null-layout hätte bleiben können - so sind zumindest meine Erfahrungen damit.
Gruß
 

diggaa1984

Top Contributor
ich finds mit ein wenig übung eigentlich recht handlich :) .. wenn es geht nutz ich auch einfache layouts, aber sobald ich mit verschachteln anfange, kann ich auch gleich gridbag nehmen
 
F

Firephoenix

Gast
Jo diggaa1984, da stimme ich dir zu.


...sagen die Leute, die es nicht verstehen. ;)

Hi,
vom verständnis her ist das nicht so das problem, ich denke es ist eher geschmacks- und übungssache :)
Da ich aber auch eher selten die Notwendigkeit habe komplexere Layouts für Komponenten zu erstellen bin ich bis jetzt fast immer an dem Ding vorbei gekommen, und die paar mal wo ich es gebraucht habe konnte ich im nachhinein durch 2 geschachtelte Layouts lösen, was den Code damals um den Faktor 5 lesbarer gemacht hatte :D.
Wobei ich gerade bei komplexeren Eingabemasken bei denen die Components feiner miteinander interagieren sollen wohl selbst das GridBag nehmen würde, bevor ich 20 mal irgendwas ineinander stecke und dann eh nichts mehr läuft.
Gruß
 

L-ectron-X

Gesperrter Benutzer
Stimmt, die eigentliche Kunst ist es, zu erkennen, welcher LayoutManager am effektivsten das gewünschte Ergebnis darstellen wird. Manchmal erreicht man das oft schneller, wenn man Layouts vermischt bzw. verschachtelt.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
A GridBagLayout Fehler Java Basics - Anfänger-Themen 7
S Gridbaglayout Problem Java Basics - Anfänger-Themen 2
B GridBagLayout in der oberen rechten Ecke starten statt mittig Java Basics - Anfänger-Themen 2
L Das erste Mal GridBagLayout - wie geht das? Java Basics - Anfänger-Themen 5
J Gridbaglayout Java Basics - Anfänger-Themen 2
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
L Fenster winzig klein durch GridBagLayout Java Basics - Anfänger-Themen 3
R GridBagLayout funktioniert nicht Java Basics - Anfänger-Themen 3
Y add Funktion für GridBagLayout zeigt Button nicht an Java Basics - Anfänger-Themen 3
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
M GridBagLayout-Problem Java Basics - Anfänger-Themen 13
S GridBagLayout neue Objekte hinzufügen Java Basics - Anfänger-Themen 3
N JPanel - Gridbaglayout Java Basics - Anfänger-Themen 11
T GridBagLayout Autoanpassung Java Basics - Anfänger-Themen 6
X GridBagLayout Komponenten Anordnungsproblem Java Basics - Anfänger-Themen 4
S JTable in GridBagLayout zwingen Java Basics - Anfänger-Themen 2
S GridBagLayout: Problemchen Java Basics - Anfänger-Themen 2
Antoras weightx bei GridBagLayout Java Basics - Anfänger-Themen 2
C GridBagLayout Java Basics - Anfänger-Themen 6
J JButtons mit GridBagLayout anordnen Java Basics - Anfänger-Themen 9
I Swing-Komponenten-Größe im GridBagLayout beschränken Java Basics - Anfänger-Themen 2
G GridBagLayout und JTable Java Basics - Anfänger-Themen 2
N GridBagLayout: gleichmäßige verteilung von Komponenten Java Basics - Anfänger-Themen 23
D GridbagLayout Java Basics - Anfänger-Themen 16
G GridBagLayout Java Basics - Anfänger-Themen 3
G GridBagLayout einstellen Java Basics - Anfänger-Themen 5
W GridBagLayout und JTable Java Basics - Anfänger-Themen 4
C GridBagLayout BIld an variabler Stelle einfügen Java Basics - Anfänger-Themen 2
K Gridbaglayout, wie geht das? Java Basics - Anfänger-Themen 2
D GridBagLayout Java Basics - Anfänger-Themen 2
G GridBagLayout -> Wie werden Elemente "zentriert&quot Java Basics - Anfänger-Themen 7
J Problem mit GridBagLayout und JPanel Java Basics - Anfänger-Themen 4
M Problem mit Aktualisierung von GridBagLayout Java Basics - Anfänger-Themen 2
D GridBagLayout Java Basics - Anfänger-Themen 4
T ungewollte zentrierte Ausrichtung im Gridbaglayout Java Basics - Anfänger-Themen 5
M Problem mit GridBagLayout Java Basics - Anfänger-Themen 3
R GridBagLayout und JTextField: Textfeld ist viel zu schmal Java Basics - Anfänger-Themen 4
C Size JTextField in GridBagLayout Java Basics - Anfänger-Themen 2
J image im gridbaglayout? Java Basics - Anfänger-Themen 2
H GridBagLayout Java Basics - Anfänger-Themen 2
C Button in GridBagLayout einstellen Java Basics - Anfänger-Themen 4
K GridBagLayout, JFrame und Scrollen Java Basics - Anfänger-Themen 4
G GridBagLayout Java Basics - Anfänger-Themen 5
ShapeShifter GridBagLayout Java Basics - Anfänger-Themen 7
M GridBagLayout und enthaltende komponenten Java Basics - Anfänger-Themen 5
G GridBagLayout wie? Grundgerüst leicht komplex. Java Basics - Anfänger-Themen 2
G Linie/Gitter in GridBagLayout Java Basics - Anfänger-Themen 4
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5
P GridBagLayout Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben