GridbagLayout

Status
Nicht offen für weitere Antworten.

Dutch_OnE

Mitglied
Hallo,

ich habe eine GUI Ausgabe in einen JSplitPane aufgeteilt. (Top / Down)

In den unteren Bereich habe ich danach einen JPanel gesetzt und ein GridbagLayout gesetzt.

Nun kann ich im GridbayLayout einstellen was ich will, er setzt meine Elemente immer in die Mitte und nicht nach ganz oben.

Anbei einige Code Auszüge:

Code:
		// Frame mit 2 Feldern instanzieren
		JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

		// JPanel für Fenster
		top = new JPanel();
		down = new JPanel();

		// Layout für Fenster
		top.setLayout(new FlowLayout());
		down.setLayout(new GridBagLayout());

Code:
		// Aufteilung des JSplitPane
		split.setTopComponent(top);
		split.setBottomComponent(down);

		// Darstellungsoptionen
		Container cp = getContentPane();
		cp.add(split);
		setVisible(true);
		setSize(1000, 600);

Code:
		GridBagConstraints a = new GridBagConstraints();
		JTextField angbt = new JTextField("Angebotnummer");
		JComboBox cmbBoxA = new JComboBox (Util.getAlleAngebotsNr());
		cmbBoxA.setEditable(true);
		cmbBoxA.setMaximumRowCount(10);
		
		angbt.setPreferredSize(new Dimension(200,20));
		cmbBoxA.setPreferredSize(new Dimension(200,20));
		
		a.fill = GridBagConstraints.HORIZONTAL;
		a.gridx = 1;
		a.gridy = 0;
		a.weightx = 0;
		a.weighty = 0;
		down.add(angbt , a);
		
		a.fill = GridBagConstraints.HORIZONTAL;
		a.gridx = 2;
		a.gridy = 0;
		a.weightx = 0;
		a.weighty = 0;
		down.add(cmbBoxA , a);

Jemand eine Idee ? Ich vermute das das Panel irgendwie auf zentriert steht, bekomme es aber nicht weg.
 

Dutch_OnE

Mitglied
Leider nicht. Das Textfeld und die Combobox werden im unteren JPanel immer noch in der Mitte (horizontal und vertikal) angezeigt.

Horizontal ist das in Ordnung, aber ich möchte sie vertikal oben angeordnet haben.
 

Niki

Top Contributor
Hast du dem Panel das GridBagLayout gesetzt? Wenn du Komponenten oben angeordnet haben möchtest und mehrere Zeilen im Layout hast muss die unterste Zeile weighty auf 1 haben und alle anderen auf 0 (weil die unterste Zeile ja den Restplatz in die Y-Achse bekommen soll)
 

Dutch_OnE

Mitglied
Klappt trotzdem nicht.

Also ich habe folgendes gemacht.

1) Frame erstellt
2) JSplitPane in diesen Frame gelegt (top / down)
3) beide haben einen JPanel bekommen
4) down hat GridBagLayout
5) in diesem Teil sind ein Textfeld und eine Combobox

Beide werden zentriert (horizontal und vertikal) angeordnet. Ich möchte das sie vertikal oben angeordnet werden.

Das GridbagLayout müsste passen. Ich glaube es liegt eher an einer der obenren Instanzen.
 
S

SlaterB

Gast
poste im Zweifel ein vollständiges Programm ohne unnötige Extras wie SplitPane oder
> cmbBoxA.setEditable(true);
> cmbBoxA.setMaximumRowCount(10);
> angbt.setPreferredSize(new Dimension(200,20));

falls das nicht direkt etwas mit dem Problem zu tun hat
 

Dutch_OnE

Mitglied
Code:
		GridBagConstraints a = new GridBagConstraints();
		JTextField angbt = new JTextField("Angebotnummer");
		JComboBox cmbBoxA = new JComboBox (Util.getAlleAngebotsNr());
		cmbBoxA.setEditable(true);
		cmbBoxA.setMaximumRowCount(10);
		
		angbt.setPreferredSize(new Dimension(200,20));
		cmbBoxA.setPreferredSize(new Dimension(200,20));
		
		a.fill = GridBagConstraints.HORIZONTAL;
		a.gridx = 1;
		a.gridy = 0;
		a.weightx = 0;
		a.weighty = 0;
		down.add(angbt , a);
		
		a.fill = GridBagConstraints.HORIZONTAL;
		a.gridx = 2;
		a.gridy = 0;
		a.weightx = 0;
		a.weighty = 0;
		down.add(cmbBoxA , a);
 

Dutch_OnE

Mitglied
In meinem unteren Panel, werden die Elemente zentriert, obwohl die erste Spalte/Zeile oben links beginnen sollte.
 

Dutch_OnE

Mitglied
habe ich auch schon gemacht.

Kann es sein, dass ich im JPanel oder beim new GridBagLayout einen Übergabeparameter setzen muss ?
Oder kann ich im JPanel das überhaupt einstellen ?

In einem anderen Programm funktionieren die Einstellungen ohne Probleme. Allerdings schreibe ich dort nicht in einen JPanel sondern in einen JFrame.
 
S

SlaterB

Gast
der Anchor bringt wohl nur innerhalb der Zeile etwas,
ich kann mir gut vorstellen, dass das GridBagLayout zentriert,
wenn es oben links anfangen würde, würde man sich an anderer Stelle beschweren,

eine Möglichkeit ist es, das restliche Layout aufzufüllen:
Code:
public class TestGUI
    extends JFrame
{
    public TestGUI()
        throws Exception
    {
        // Frame mit 2 Feldern instanzieren
        JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

        // JPanel für Fenster
        JPanel top = new JPanel();
        JPanel down = new JPanel();

        // Layout für Fenster
        top.setLayout(new FlowLayout());
        down.setLayout(new GridBagLayout());

        GridBagConstraints a = new GridBagConstraints();
        JTextField angbt = new JTextField("Angebotnummer");
        JComboBox cmbBoxA = new JComboBox();
        cmbBoxA.setEditable(true);
        cmbBoxA.setMaximumRowCount(10);

        angbt.setPreferredSize(new Dimension(200, 20));
        cmbBoxA.setPreferredSize(new Dimension(200, 20));

        a.gridx = 0;
        a.gridy = 0;
        a.weightx = 0;
        a.weighty = 0;
        down.add(angbt, a);

        a.gridx = 1;
        a.gridy = 0;
        a.weightx = 0;
        a.weighty = 0;
        down.add(cmbBoxA, a);
        
        a.gridx = 2;
        a.gridy = 0;
        a.weightx = 1;
        a.weighty = 0;
        down.add(new JLabel(""), a);
        
        
        a.gridx = 0;
        a.gridy = 1;
        a.weightx = 0;
        a.weighty = 1;
        down.add(new JLabel(""), a);
   
        
        // Aufteilung des JSplitPane
        split.setTopComponent(top);
        split.setBottomComponent(down);

        // Darstellungsoptionen
        Container cp = getContentPane();
        cp.add(split);


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 200);
        setVisible(true);


    }


    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}
oder mit anchor:

Code:
public class TestGUI
    extends JFrame
{
    public TestGUI()
        throws Exception
    {
        // Frame mit 2 Feldern instanzieren
        JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

        // JPanel für Fenster
        JPanel top = new JPanel();
        JPanel down = new JPanel();

        // Layout für Fenster
        top.setLayout(new FlowLayout());
        down.setLayout(new GridBagLayout());

        GridBagConstraints a = new GridBagConstraints();
        JTextField angbt = new JTextField("Angebotnummer");
        JComboBox cmbBoxA = new JComboBox();
        cmbBoxA.setEditable(true);
        cmbBoxA.setMaximumRowCount(10);

        angbt.setPreferredSize(new Dimension(200, 20));
        cmbBoxA.setPreferredSize(new Dimension(200, 20));

        a.gridx = 0;
        a.gridy = 0;
        a.weightx = 0;
        a.weighty = 1;
        a.anchor = GridBagConstraints.NORTH;
        down.add(angbt, a);

        a.gridx = 1;
        a.gridy = 0;
        a.weightx = 0;
        a.weighty = 0;
        down.add(cmbBoxA, a);
        
        a.gridx = 2;
        a.gridy = 0;
        a.weightx = 1;
        a.weighty = 0;
        down.add(new JLabel(""), a);
        
        
   
        
        // Aufteilung des JSplitPane
        split.setTopComponent(top);
        split.setBottomComponent(down);

        // Darstellungsoptionen
        Container cp = getContentPane();
        cp.add(split);


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 200);
        setVisible(true);


    }


    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}
 

Dutch_OnE

Mitglied
Du wirst rechthaben und ich muss mir wohl einen Kompromiss ausdenken. Ich kann Deine 2te Lösung nicht machen, da der unteren Bildschirm erst nach Knopfdruck eines Buttons aus dem oberen Bildschirm ausgeführt wird.

Daher kann ich vorher nicht den GridbagConstraints ausrichten.

Mir wäre der FlowLayout auch lieber, allerdings gibts da meines Wissens nach, keine Möglichkeit eines manuellen Zeilenumbruchs.

Gibt es denn einen Befehl um die Größe vom Ausgabefenster (kompletter Frame) zu fixieren ?
 
S

SlaterB

Gast
denkbar wäre auch noch

Code:
 angbt.setPreferredSize(new Dimension(200, 20));
        cmbBoxA.setPreferredSize(new Dimension(200, 20));

        a.gridx = 0;
        a.gridy = 0;
        down.add(angbt, a);

        a.gridx = 1;
        a.gridy = 0;
        down.add(cmbBoxA, a);
        
        JPanel p = new JPanel();
        p.setLayout(new FlowLayout(FlowLayout.LEFT));
        p.add(down);
                
        // Aufteilung des JSplitPane
        split.setTopComponent(top);
        split.setBottomComponent(p);
wobei man dann wieder ein paar Pixel mehr Abstand durch das zusätzliche Zwischenpanel bekommt

beim JFrame noch
setResizable(false);
 

Niki

Top Contributor
Kurz erklärt:

weightx und weighty definieren wieviel Restplatz die Zelle bekommt. Du willst dass sie den gesamten Restplatz bekommt also weighty = 1.0, das bringt aber auch nur was wenn die Komponente innerhalb der Zelle im Norden platziert wird also brauchst du beides weighty=1.0 und anchor=GridBagConstraints.NORTH
Ich habs ausprobiert und beides gemeinsam führt zum Erfolg!
 
S

SlaterB

Gast
> also brauchst du beides weighty=1.0 und anchor=GridBagConstraints.NORTH
> Ich habs ausprobiert und beides gemeinsam führt zum Erfolg!

die Idee habe ich auch als mein Beispiel 2 übernommen ;)
 

Dutch_OnE

Mitglied
public void ansehenAngebot() throws Exception{
zurueck.setEnabled(true);
ansehen1.setEnabled(false);
aendern1.setEnabled(false);
loeschen1.setEnabled(false);
eingeben1.setEnabled(false);

GridBagConstraints a = new GridBagConstraints();
JTextField angbt = new JTextField("Angebotnummer");
JComboBox cmbBoxA = new JComboBox (Util.getAlleAngebotsNr());
cmbBoxA.setEditable(true);
cmbBoxA.setMaximumRowCount(10);

angbt.setPreferredSize(new Dimension(200,20));
cmbBoxA.setPreferredSize(new Dimension(200,20));

a.fill = GridBagConstraints.HORIZONTAL;
a.gridx = 1;
a.gridy = 0;
a.weightx = 0;
a.weighty = 1;
a.anchor = GridBagConstraints.NORTH;



ALSO SO ???
 
Status
Nicht offen für weitere Antworten.
Ä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
K GridBagLayout Java Basics - Anfänger-Themen 7
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
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