Textfield in GradBagLayout

dasago

Mitglied
Hey Leute,
ich hab grad ein Problem mit meinen Textfeldern.
Ich erstelle die Textfelder dynamisch und möchte diese in ein JPanel hinzufügen. Dies klappt auch alles wunderbar. mein Problem ist nun das die Textfelder klein sind und ich keine Größe bestimmen kann. Kann mir da jemand weiterhelfen? Die Anordnung stimmt so weit! Wie kann ich den Textfeldern eine bestimmt Größe zuordnen, sodass es auch funktioniert? Verwendet wird das GridBagLayout!
Hab es schon mit preferredSize und setDimension etc. probiert.. klappt alles nicht..! Woran kann das liegen?

Zur Info: countPlayer is die Anzahl, die übergeben wird an die Klasse, also so viel Textboxen werden erstellt!


Code:
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Player extends JFrame {
	private static final long serialVersionUID = 1L;
	private final int countPlayer;

	/**
	 * This is the default constructor
	 */
	public Player(int count) {
		super();
		this.countPlayer = count;
		initialize();
		setPlayer();
		setDefaultCloseOperation(EXIT_ON_CLOSE);		
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setTitle("Player");
		this.setVisible(true);
	}
	
	public void setPlayer(){		
 		JPanel panel = new JPanel(new GridBagLayout());	 // (countPlayer +1, 2)
		panel.setLayout(new GridBagLayout());
 		System.out.println(countPlayer);
 		final JTextField txtBoxes[] = new JTextField[countPlayer];
 		final JLabel lblBoxes[] = new JLabel[countPlayer];
 		 		
 		for (int i = 0; i < txtBoxes.length; i++){
 			lblBoxes[i] = new JLabel();
 			txtBoxes[i] = new JTextField("", 150);
 			lblBoxes[i].setText("Player " + (i+1) + ":");
 			
 	 		GridBagConstraints gbLbl = new GridBagConstraints();
 	 		gbLbl.gridx = 0;
 	 		gbLbl.gridy = 1 + i; 	 		
 	 		GridBagConstraints gbTxt = new GridBagConstraints();
 	 		gbTxt.gridx = 1;
 	 		gbTxt.gridy = 1 + i;
 	 		
 			panel.add(lblBoxes[i], gbLbl); 	 		
 			panel.add(txtBoxes[i], gbTxt);
 		}
 		
 		add(panel,BorderLayout.CENTER);
 		
 		pack();
 		setVisible(true);
 		
		JButton btnAccept = new JButton();
		btnAccept.setText("Accept");
	 	GridBagConstraints gb = new GridBagConstraints();
	 	gb.gridx = 0;
	 	gb.gridy = 8;
		
		panel.add(btnAccept, gb);
		this.setSize(500,500);
	}
}
 
Zuletzt bearbeitet:
Du kannst unter ipadx die Größe des Textfeldes angeben... Wenn du mit dem GridBagLayout arbeitest.

mit ipady gibst du die höhe an.

gridx --> start Position x
gridy --> start Position y
gridwidth --> von Startposition y, n Felder in die Breite
gridheight --> von Startposition y, n Felder in die Höhe
ipadx --> bei zB Textfeldern die gewünschte Weite in Pixel
ipady --> bei zB Textfeldern die gewünschte Höhe in Pixel

Das alles kannst du aber auch unter GridBagLaoyout.

Ich hoffe ich konnte dir damit weiter helfen...

LG Polli
 
Hallo,

wenn man nicht mit absoluten Werten arbeiten möchte, gibt es noch eine Alternative. Bei dem GridbagLayout kann man den einzelnen Zellen die Gewichtung vergeben. Standardmässig ist sie bei allen Zellen "0.0", d.h. alle Zellen sind gleich gewichtet und teilen sich den gesamten Platz, je nach preferred size.

Du musst in deine for Schleife folgende Zeilen hinzufügen:
Java:
gbTxt.weightx = 1.0;
gbTxt.fill = GridBagConstraints.HORIZONTAL;
dann verwenden die Textfelder den ganzen freien Platz.

Grüße
Vincent
 
Zurück