# Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField)



## stibi (16. Jan 2013)

Hallo Allerseits!

Ich versuch grad ein GUI mit verschiedenen Buttons, Textflieds etc. zu erstellen. Leider will es nicht so recht funktionieren. Hier mal der Code (Meine "Gedankengänge" & Fragen folgen danach):


```
public class Main{
	public static void main(String[] args){

		JFrame frame = new JFrame();
		frame.setLayout(new BorderLayout());
		frame.setVisible(true);
		frame.setSize(500, 500);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JMenuBar bar = new JMenuBar();
		frame.add(bar, BorderLayout.NORTH);
		


		JButton btn1 = new JButton("Exti");
		btn1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				System.exit(0);}
		});
		
		bar.add(btn1);
		
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		
		JTextField path = new JTextField("Bitte hier Pfad angeben");
		panel.add(path, BorderLayout.NORTH);
		
		frame.add(panel, BorderLayout.CENTER);
		panel.setVisible(true);
	}
}
```

Grundsätzlich wollte ich dem frame im Center ein neues JPanel hinzufügen, damit ich auch im Center Bereich des Frames mit einem neue Borderlayout Manager arbeiten kann. Leider funktioniert das so nicht... Eigentlich beherrschen ja alle Klassen, welche von JComponent erben die LayoutManager usw. Daher weiss ich nicht, wieso das nicht funktionieren sollte. Beim obigen Code wird mir die JMenuBar mit dem Button angezeigt. Auch der ActionListener in der anonymen Klasse funktioniert wunderbar. Aber das JtextField wird mir einfach nicht angezeigt. 

Nach meiner "Interpretation" sollte das JPanel im Center des Frames angezeigt werden und das JTextField im "Norden" des JPanels... Geht das so gar nicht?

Vielen Dank für jegliche Hilfe & freundliche Grüsse

stibi


----------



## Timothy Truckle (16. Jan 2013)

Verschiebe mal Zeile 6 ganz ans Ende von main.

bye
TT


----------



## rahmstein (16. Jan 2013)

versuchs mal so....




```
JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
     
        
        JTextField path = new JTextField("Bitte hier Pfad angeben");
        frame.add(path, BorderLayout.SOUTH);
      
        
   
        frame.setVisible(true);
```


----------



## stibi (16. Jan 2013)

Tatsächlich -  frame.setVisible(true); ans Ende gesetzt und jetzt funktioniert es - Dankeschön euch beiden! 

Noch eine Frage zum BorderLayout: Momentan habe ich nur im NORTH Bereich Elemente, welche angezeigt werden. Und solange ich EAST und WEST keine Elemente hinzufüge, wird mir hier das Textfield über die gesamte Breite des Fensters angezeigt. Gibt es eine Möglichkeit, eine art "Platzhalter" einzufügen, damit links und rechts (also east und west) nicht vom Texfield belegt wird? So dass sich das Texfield von der breite her nur im CENTER Bereich befindet? 


Grüsse

Stibi


----------



## Timothy Truckle (16. Jan 2013)

stibi hat gesagt.:


> Gibt es eine Möglichkeit, eine art "Platzhalter" einzufügen, damit links und rechts (also east und west) nicht vom Texfield belegt wird? So dass sich das Texfield von der breite her nur im CENTER Bereich befindet?


Ja.
Ein weiteres JPanel mit BorderLayout. Diese neue Panel liegt dann im CENTER des jetzigen und enthält das TextField in NORTH und den restlichen Inhalt in CENTER.

Man _kann _das auch mit [JAPI]GridBagLayout [/JAPI]oder [JAPI]FormLayout[/JAPI] zusammenfrickeln, aber geschachtelte Panels haben den Vorteil, dass man die auch in anderen Klassen wegkapseln kann. D.h. dass Du dann dort, wo die GUI aufgebaut wird gar nicht wissen mußt wie die Struktur der inneren Elemente ist...

bye
TT


----------



## stibi (16. Jan 2013)

Also; wenn ich dich richtig verstanden habe sollte das in etwa so aussehen:


```
JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		
		JPanel platzhalterEastWest = new JPanel();
		platzhalterEastWest.setLayout(new BorderLayout());
		
		frame.add(platzhalterEastWest, BorderLayout.CENTER);
		platzhalterEastWest.add(panel, BorderLayout.CENTER);
		
		JTextField path = new JTextField("Bitte hier Pfad angeben");
		panel.add(path, BorderLayout.NORTH);
```

Leider klappt das so nicht :noe: Das TextField belegt noch immer die ganze Breite des Fensters.

Ausser ich habe dich falsch verstanden. 

Grüsse

stibi


EDIT: Folgendes begrenzt die Breite des TextFields ein bisschen;


```
JPanel platzhalterEast = new JPanel();
		frame.add(platzhalterEast, BorderLayout.EAST);
		JPanel platzhalterWest = new JPanel();
		frame.add(platzhalterWest, BorderLayout.WEST);
```

Also könnte ich beim platzhalterEastWest jeweils noch ein Panel in EAST und WEST hinzufügen usw. Scheint mir aber ein bisschen umständlich


----------

