LayoutManager gridBagLayout wird nicht richtig Dargestellt

XPrototypeX

Aktives Mitglied
Hallo Leute,
hab ein kleines Problem, habe auf einem JPanel ein paar Buttons geadded per gridBagLayout (mit dem Windows Designer. Jedoch wenn ich das Spiel ausführe werden mir die Buttons undereinander angezeigt, in der rechte oberen ecke. Im Designer jedoch sind die Button in der Mitte untereinander.

Hier mal mein Code.

Java:
public class HauptScreenView {
	private GridBagLayout gridBagLayout = new GridBagLayout();
	private JFrame frame = new JFrame();
	private JLabel lblTowerDefense = new JLabel("Tower Defense");
	private JButton btnEinzelspieler = new JButton("Einzelspieler");;
	private JButton btnMehrspieler = new JButton("Mehrspieler");
	private JButton btnOptionen = new JButton("Optionen");;
	private JButton btnSpielVerlassen  = new JButton("Verlassen");;

	
	
	

	/**
	 * Create the application.
	 */
	public HauptScreenView() {
		initialize();
		frame.setVisible(true);
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize(MouseListener cmd) {
		
		frame.setBounds(100, 100, 750, 721);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		
		
		
		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		frame.getContentPane().setLayout(gridBagLayout);
		
		
		
		GridBagConstraints gbc_lblTowerDefense = new GridBagConstraints();
		gbc_lblTowerDefense.insets = new Insets(0, 0, 5, 0);
		gbc_lblTowerDefense.gridx = 12;
		gbc_lblTowerDefense.gridy = 1;
		frame.getContentPane().add(lblTowerDefense, gbc_lblTowerDefense);
		
		
		GridBagConstraints gbc_btnEinzelspieler = new GridBagConstraints();
		gbc_btnEinzelspieler.insets = new Insets(0, 0, 5, 0);
		gbc_btnEinzelspieler.gridx = 12;
		gbc_btnEinzelspieler.gridy = 3;
		frame.getContentPane().add(btnEinzelspieler, gbc_btnEinzelspieler);
		
		
		GridBagConstraints gbc_btnMehrspieler = new GridBagConstraints();
		gbc_btnMehrspieler.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnMehrspieler.insets = new Insets(0, 0, 5, 0);
		gbc_btnMehrspieler.gridx = 12;
		gbc_btnMehrspieler.gridy = 6;
		frame.getContentPane().add(btnMehrspieler, gbc_btnMehrspieler);
		
		
		GridBagConstraints gbc_btnOptionen = new GridBagConstraints();
		gbc_btnOptionen.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnOptionen.insets = new Insets(0, 0, 5, 0);
		gbc_btnOptionen.gridx = 12;
		gbc_btnOptionen.gridy = 9;
		frame.getContentPane().add(btnOptionen, gbc_btnOptionen);
		
		
		GridBagConstraints gbc_btnSpielVerlassen = new GridBagConstraints();
		gbc_btnSpielVerlassen.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnSpielVerlassen.gridx = 12;
		gbc_btnSpielVerlassen.gridy = 12;
		frame.getContentPane().add(btnSpielVerlassen, gbc_btnSpielVerlassen);
	
	
	}

}
 
Zuletzt bearbeitet:
Das Prinzip vom GridBag ist eigentlich nicht so kompliziert: du hast eine x und eine y Position eines jeden Komponenten. (0,0) ist obere linke Ecke, (1,0) ist dann direkt rechs von dem Komponenten, der in (0,0) liegt.
Du hast hier ein Paar buttons, die alle die gridX Position haben, also liegen sie alle in einer "Spalte". Sie haben unterschiedliche gridY Positionen also liegen sie untereinander.
Warum dir der WindowBuilder einen Blödsinn anzeigt kann ich nicht sagen, du solltest aber erst einen GUI-Builder verwenden, wenn du dich auch so mit den Komponenten und Layouts auskennst. Sonst stolperst du da oft über derlei Probleme.
 
Der Designer scheint im Einklang mit der Javadoc die Werte für x=13 und y=13 hier zu ignorieren (es hibt ja keine Spalte oder Zeile 13):
Java:
gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
Warum Dir Java einen Blödsinn anzeigt kann ich nicht sagen.

Gruß,
André

PS: ich habe allerdings noch nie mit diesen "override" Feldern gearbeitet, sondern immer mit den eigenen Constraints der Komponenten. Siehe auch GridBagLayout
 
Zuletzt bearbeitet:
Mh.. Das ist ja blöd dann. Ich hab jetzt 4 Views mit dem Builder gebaut und mich darauf verlassen das die auch funktionieren so wie sie Builder dargestellt werden...

Heißt das jetzt, dass ich alles nochmal neu machen darf?
 

Neue Themen


Zurück
Oben