# Elemente im Panel zentrieren mit GridLayout



## uLtRa (17. Okt 2011)

Hallo zusammen,

bin ganz neu in der Java GUI Programmierung.
Erst einmal mein Code:


```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class GUIOverview extends JFrame {

	private static final long serialVersionUID = 1L;


	public static void main( String[] args ) {
		new GUIOverview();
	}
	
	private JTable table;
	private JPanel listPanel;
	private JPanel headPanel;
	private JPanel searchPanel;
	private JPanel managePanel;
	private JPanel mainPanel;
	private JButton neu;
	private JButton change;
	private JButton delete;	
	private JTextField search;
	
	private BoxLayout bl;
	
	private String[][] rowData = {{"Kunde1"}, {"Kunde2"}};
	private String[] columnNames = {"Kunde"};
	
	
	
	
	public GUIOverview() {
		super("...");		
		initGUI();
		
		
		
	}
	
	public void initGUI() {
		
		
		
		bl = new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS);
		setDefaultCloseOperation( EXIT_ON_CLOSE );
		getContentPane().setLayout(bl);
		

		
		JLabel title = new JLabel("<html><h2>Kundenübersicht</h2></html>");
		title.setHorizontalAlignment(JLabel.CENTER);
		
		
		
		JLabel manage = new JLabel("Kunden verwalten:");
		//manage.setPreferredSize(new Dimension(50,5));
		
		
		
		search = new JTextField();
		search.setPreferredSize(new Dimension(-1,25));
		neu = new JButton("Neu");
		neu.setPreferredSize(new Dimension(30,25));
		change = new JButton("Ändern");
		change.setPreferredSize(new Dimension(30,25));
		delete = new JButton("Löschen");
		delete.setPreferredSize(new Dimension(30,25));
		
		mainPanel = new JPanel(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
		searchPanel = new JPanel(new GridLayout(0, 4, 30, 30));
		managePanel = new JPanel(new GridLayout(0, 4, 30, 30));
		headPanel = new JPanel(new BorderLayout());
		listPanel = new JPanel();
		
		
		TitledBorder bordertitle = BorderFactory.createTitledBorder("Kunden verwalten");
		managePanel.setBorder(bordertitle);
				
		TitledBorder bordertitle1 = BorderFactory.createTitledBorder("Suchen");
		searchPanel.setBorder(bordertitle1);
		
		searchPanel.setBorder(bordertitle1);

		table = new JTable( rowData, columnNames );


		headPanel.add(title);
		
		//managePanel.add(manage);
		managePanel.add(neu);
		managePanel.add(change);
		managePanel.add(delete);
		
		JLabel lab = new JLabel("Kunden suchen:");
		
		searchPanel.add(lab);
		searchPanel.add(search);
		
		listPanel.add(new JScrollPane(table));
		
		
		
		getContentPane().add(headPanel);
		getContentPane().add(new JPanel());
		getContentPane().add(new JPanel());

		getContentPane().add(managePanel);
		getContentPane().add(new JPanel());
		getContentPane().add(new JPanel());

		
		getContentPane().add(searchPanel);
		getContentPane().add(new JPanel());
		getContentPane().add(new JPanel());
		getContentPane().add(listPanel);
		getContentPane().add(new JPanel());
		getContentPane().add(new JPanel());
		
		
		pack();
		setVisible( true );
	}

	
	
	
}
```

Ich möchte die Elemente auf dem managePanel zentrieren (also die Buttons). Wie mache ich das? :bahnhof:


----------



## SlaterB (17. Okt 2011)

managePanel = new JPanel(new GridLayout(0, 3, 30, 30));
statt
managePanel = new JPanel(new GridLayout(0, 4, 30, 30));
?


----------



## uLtRa (17. Okt 2011)

dadurch dehnen sich die buttons nach außen... ;(
sie sollten schon die gleiche größe behalten!


----------



## SlaterB (17. Okt 2011)

diese Größe ergibt sich bisher als 1/4 der Breite dank 4er-GridLayout,
das ist nicht so leicht auf 1/2, 3 normale, 1/2 zu ändern,

GridBagLayout kann das vielleicht, oder TableLayout,
http://www.java-forum.org/blogs/tfa/39-snippet-tablelayout.html

z.B. in Richtung von 8 Zellen denken und in der Mitte 3x zwei Zellen belegen, dann bleiben quasi zwei 'halbe' links und rechts über


----------

