# BoxLayout: Buttons auf gleiche Größe bringen



## spacegaier (6. Aug 2007)

Hallo zusammen,

ich habe ein JFrame in dem sich ein JPanel mit mehreren Buttons befindet. Als Layout nutze ich BoxLayout.

Wie kann ich nun erreichen dass die Buttons alle die gleiche Breite haben (Habe sie bereits zentriert, was aber unwesentlich sein sollte)?

Meine setPreferedSize-Dimension scheint er nicht umzusetzen?!?

Hier mal mein Code:


```
public class MainFrame extends JFrame
{
	public MainFrame(int x, int y, String title)
	{
		JPanel mp = new JPanel();
		
		mp.setLayout(new BoxLayout(mp, BoxLayout.Y_AXIS));
		
		mp.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		
		setTitle(title);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(x, y);
		
		int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
		int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
		
		setLocation((screenWidth - x) / 2, (screenHeight - y) / 2);
		
		JButton button_new_contact 		= new JButton("Neuen Kontakt anlegen");
		JButton button_delete_contact 	= new JButton("Bestehenden Kontakt löschen");
		JButton button_show_contacts 	= new JButton("Kontakte anzeigen");
		JButton button_exit_app 		= new JButton("Adress-Buch verlassen");
		
		Dimension dim = new Dimension(150, 50);
		
		button_new_contact.setMnemonic(KeyEvent.VK_N);
		button_new_contact.setPreferredSize(dim);
		button_new_contact.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_new_contact.setToolTipText("<html>Klicken Sie hier um einen 
neuen Kontakt anzulegen.</html>");
		
		button_delete_contact.setMnemonic(KeyEvent.VK_L);
		button_delete_contact.setPreferredSize(dim);
		button_delete_contact.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_delete_contact.setToolTipText("<html>Klicken Sie hier um einen 
bestehenden Kontakt zu löschen.</html>");
		
		button_show_contacts.setMnemonic(KeyEvent.VK_A);
		button_show_contacts.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_show_contacts.setToolTipText("<html>Klicken Sie hier um alle ihre 
gespeicherten Kontakt anzuzeigen.</html>");
		
		button_exit_app.setMnemonic(KeyEvent.VK_V);
		button_exit_app.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_exit_app.setToolTipText("<html>Klicken Sie hier um das 
Adress-Buch zuverlassen.</html>");
				
		mp.add(Box.createVerticalBox());
		mp.add(button_new_contact);
		mp.add(Box.createVerticalStrut(10));
		mp.add(button_delete_contact);
		mp.add(Box.createVerticalStrut(10));
		mp.add(button_show_contacts);
		mp.add(Box.createVerticalStrut(10));
		mp.add(button_exit_app);
		mp.add(Box.createVerticalStrut(10));
		
		this.add(mp);
		pack();
		setVisible(true);

	}
```

HINWEIS: Ich nehme auch äußerst gerne Hinweise/Tipps bezüglich dem ganzen Code an (z.B. hinsichtlich Style o.ä.). Es ist mein erster Versuch in Java. Habe davor viel mit C/C++ gearbeitet. Wenn euch also etwas auffällt, bitte unbedingt auch hier reinschreiben (und keine Rücksicht von wegen erster Versuch und so!!!

Grüße - spacegaier


----------



## Wildcard (6. Aug 2007)

Die gleiche Größe erhälst du am leichtesten mit GridLayout.


----------



## spacegaier (6. Aug 2007)

Okay, habe jetzt auch GridLqyout umgestellt. Jetzt liegen aber meine Buttons wieder direkt aneinander. Wie bringe ich zwischen diese jetzt noch ein bisschen Freiraum?


```
public class MainFrame extends JFrame
{
	public MainFrame(int x, int y, String title)
	{
		JPanel mp = new JPanel();
		
		mp.setLayout(new GridLayout(0,1));
		
		mp.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		
		setTitle(title);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(x, y);
		
		int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
		int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
		
		setLocation((screenWidth - x) / 2, (screenHeight - y) / 2);
		
		JButton button_new_contact 		= new JButton("Neuen Kontakt anlegen");
		JButton button_delete_contact 	= new JButton("Bestehenden Kontakt löschen");
		JButton button_show_contacts 	= new JButton("Kontakte anzeigen");
		JButton button_exit_app 		= new JButton("Adress-Buch verlassen");
		
		Dimension dim = new Dimension(280, 50);
		
		button_new_contact.setMnemonic(KeyEvent.VK_N);
		button_new_contact.setPreferredSize(dim);
		button_new_contact.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_new_contact.setToolTipText("<html>Klicken Sie hier um einen 
neuen Kontakt anzulegen.</html>");
		
		button_delete_contact.setMnemonic(KeyEvent.VK_L);
		button_delete_contact.setPreferredSize(dim);
		button_delete_contact.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_delete_contact.setToolTipText("<html>Klicken Sie hier um einen 
bestehenden Kontakt zu löschen.</html>");
		
		button_show_contacts.setMnemonic(KeyEvent.VK_A);
		button_show_contacts.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_show_contacts.setToolTipText("<html>Klicken Sie hier um alle ihre 
gespeicherten Kontakt anzuzeigen.</html>");
		
		button_exit_app.setMnemonic(KeyEvent.VK_V);
		button_exit_app.setAlignmentX(Component.CENTER_ALIGNMENT);
		button_exit_app.setToolTipText("<html>Klicken Sie hier um das 
Adress-Buch zuverlassen.</html>");
				
		mp.add(button_new_contact);
		mp.add(button_delete_contact);
		mp.add(button_show_contacts);
		mp.add(button_exit_app);
		
		
		this.add(mp);
		pack();
		setVisible(true);

	}
```


----------



## Wildcard (6. Aug 2007)

http://java.sun.com/javase/6/docs/api/java/awt/GridLayout.html#setVgap(int)


----------



## spacegaier (6. Aug 2007)

Okay, danke, jetzt geht's.

Für alle, hier die Lösung:

Anstatt nur: 
	
	
	
	





```
mp.setLayout(new GridLayout(0,1));
```
muss man folgendes nehmen:


```
GridLayout gl = new GridLayout(0,1);
		gl.setVgap(10);
		mp.setLayout(gl);
```


----------

