# Komponenten im JPanel linksbündig anordnen?



## tobbbbi (24. Aug 2008)

Hi!

Ich habe ein kleines Problem mit der Anordnung von Komponenten.

Bei meinem GUI ist das JFrame auf das GridLayout (2,1) gesetzt und ich habe mehrere JPanels hinzugefügt. In diesen JPanels befinden sich jeweils 2 Komponenten(JLabel & JTextField) mit dem Standard FlowLayout. 

Wenn ich das Programm nun starte erscheinen leider die Komponenten in den JPanels nicht schön untereinander sondern, die JPanels werden jeweils auf die volle Breite des JFrames gezogen und dann die Komponeten jeweils in die Mitte gesetzt, was dann insgesamt sehr konfus, weil nicht gegliedert, aussieht.
Wie bekomme ich es hin, dass alles sauber untereinander ist? Kann man die Komponenten irgendwie links zentrieren?

Danke schonmal für eure Hilfe!


----------



## SlaterB (24. Aug 2008)

verwende GridBagLayout oder ein anderes höheres Layout oder organisiere die inneren JPanel so, dass sie ihren Inhalt links anordnen,
ohne Code gehts in jedem Fall nicht weit


----------



## tobbbbi (25. Aug 2008)

SlaterB hat gesagt.:
			
		

> verwende GridBagLayout oder ein anderes höheres Layout oder organisiere die inneren JPanel so, dass sie ihren Inhalt links anordnen,
> ohne Code gehts in jedem Fall nicht weit



Jap genau darum gehts ja, wie kann ich die inneren JPanel organisieren, dass deren Komponeten linksbündig sind? Mit setAlignmentX(JPanel.LEFT_ALIGNMENT) gehts schonmal nicht, scheinbar macht das das GridLayout kaputt (hat Vorrang).


----------



## SlaterB (25. Aug 2008)

überlege doch mal was du postest, das bringt dich keinen Schritt weiter

mir bleiben nur vier Antwort-Möglichkeiten:
a) nochmal wiederholen, dass es sehr wohl mit anderen Layouts geht, toll
b) dich nochmal darauf hinweisen, ein komplettes Code-Beispiel zu posten, toll
c) selber ein funktionierendes Beispiel posten, mache ich nicht,siehe b)
d) dich darauf hinweisen, dass es nicht vorangeht


----------



## tobbbbi (25. Aug 2008)

SlaterB hat gesagt.:
			
		

> überlege doch mal was du postest, das bringt dich keinen Schritt weiter
> 
> mir bleiben nur vier Antwort-Möglichkeiten:
> a) nochmal wiederholen, dass es sehr wohl mit anderen Layouts geht, toll
> ...




Sorry, aber du hast mit deinem Posting davor im Grunde einfach nochmal meine Frage wiederholt:
"[...] oder organisiere die inneren JPanel so, dass sie ihren Inhalt links anordnen, [...]"

Genau DAS weiß ich ja nicht, wie es geht - darum könntest du mir ja kurz verraten, wie man das macht. Dazu braucht es ja kein umfangreiches Beispiel. 
Aber egal, hier der (stark verkürzte) Code:


```
import java.awt.*;
import javax.swing.*;

public class WarenMenue extends JFrame
{
	JLabel bezLabel_ref;
	JTextField bezText_ref;
	JPanel bezPanel_ref;

      public WarenMenue()
	{
		this.setTitle("Auktionshaus - Warenverwaltung");
		this.setLayout(new GridLayout(0,1));
		bezLabel_ref = new JLabel("Bezeichnung:");
		artnrText_ref = new JTextField(4);
		artnrText_ref.setEnabled(false);
		bezPanel_ref = new JPanel();
		bezPanel_ref.add(bezLabel_ref);
                bezPanel_ref.add(bezText_ref);
		this.add(bezPanel_ref);
		this.setSize(700,510);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);		
	}
```


Testklasse:


```
public class Start
{
	public static void main(String[] args)
	{
		WarenMenue gui2_ref = new WarenMenue();
	}
}
```


----------



## SlaterB (25. Aug 2008)

> Sorry, aber du hast mit deinem Posting davor im Grunde einfach nochmal meine Frage wiederholt

kann nicht sein, ich arbeite ja immer effektiv 

deine Ursprungsfrage handelte nur vom GridLayout ohne Tendenzen, was du nun stattdessen tun willst,
ich habe dir drei wertvolle Infos gegeben:

a)
nur mit GridLayout kommst du da nicht weiter
b)
eine Alternative wäre ein anderes äußeres Layout als GridLayout
c)
eine Alternative wäre ein anderes inneres Layout, (edit: fast) völlig unabhängig vom äußeren Layout

dass du die Layouts selber lernen musst, war und ist ja selbstverständlich,
aber bei so einem schönen Testprogramm (bis auf unbekannte Variable artnrText_ref)
kann ich mal eine denkbare Variante einbauen:


```
public class WarenMenue
    extends JFrame
{
    JLabel bezLabel_ref;
    JTextField bezText_ref;
    JPanel bezPanel_ref;

    public WarenMenue()
    {
        this.setTitle("Auktionshaus - Warenverwaltung");
        this.setLayout(new GridLayout(0, 1));
        bezLabel_ref = new JLabel("Bezeichnung:");
        bezPanel_ref = new JPanel();
        bezPanel_ref.setLayout(new BorderLayout());
        bezPanel_ref.add(bezLabel_ref, BorderLayout.WEST);
        this.add(bezPanel_ref);
        this.setSize(700, 510);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        WarenMenue gui2_ref = new WarenMenue();
    }
}
```


----------

