GridBagLayout "links-rechts-layouten"

sheddy

Mitglied
Hi,

ich habe den unten stehenden Code. Wie kann ich es erreichen, dass die Labels links und die TextFields rechtsbündig sind?

Die Textfields sollen gleich lang sein, daher lieber rechtsbündig, da die Labels verschieden lang sind. WIe kann man das erreichen? Danke für jeden Tipp 😉





Java:
package test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.Dialog.ModalityType;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class GridBagTest extends JFrame {

	/**
	 * 
	 * @param x - in welcher spalte
	 * @param y - in welcher zeile
	 * @param width - horizontale ausdehnung, über wieviel spalten
	 * @param height - vertikale ausdehnung, über wieviel zeilen
	 * @return - GridBagConstraints-Objekt
	 */
	private GridBagConstraints createGBC(int x, int y, int width, int height, int anchor){
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.anchor = anchor;
		gbc.insets = new Insets(8, 2, 1, 1);
		return gbc;	
	}
	
	public GridBagTest() {
		// TODO Auto-generated constructor stub
		
		setMinimumSize(new Dimension(600, 400));
		setTitle("GridBagTest");
		setResizable(false);	
		setDefaultCloseOperation(EXIT_ON_CLOSE);
				
		// Fenster in der Mitte des Bildschimrs positionieren
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((d.width - getSize().width)/2, (d.height - getSize().height)/2);	
		
		// gesamtes Layout des Dialogfensters - EAST, SOUTH, WEST, NORTH
		BorderLayout bord =  new BorderLayout();		
		setLayout(bord);
		
		
			
				JPanel centerBox = new JPanel();
				centerBox.setLayout(new BoxLayout(centerBox, BoxLayout.PAGE_AXIS));
				
				GridBagLayout gbl = new GridBagLayout();
				Dimension dim = new Dimension(300, 20);
				//Dimension dim = new Dimension(280, 20);		
				GridBagConstraints gbc = null;
				
				

				JPanel p1 = new JPanel(gbl);		
				p1.setBorder(BorderFactory.createTitledBorder("PanelBorder 1"));

				
				JLabel p1Label = new JLabel("Testtesttestt");								
				gbc = createGBC(0, 0, 1, 1, GridBagConstraints.WEST);
				gbl.setConstraints(p1Label, gbc);
				p1.add(p1Label);		
					
			
				JTextField p1Txt = new JTextField();
				p1Txt.setBorder(BorderFactory.createLineBorder(Color.BLACK));
				p1Txt.setPreferredSize(dim);
				gbc = createGBC(1, 0, 1, 1, GridBagConstraints.EAST);
				gbl.setConstraints(p1Txt, gbc);
				p1.add(p1Txt);
				
				
				JLabel p1PDF = new JLabel("PDF");
				gbc = createGBC(0, 1, 1, 1, GridBagConstraints.WEST);
				gbl.setConstraints(p1PDF, gbc);
				p1.add(p1PDF);
				
				
				JTextField p1PDFTxt = new JTextField();
				p1PDFTxt.setBorder(BorderFactory.createLineBorder(Color.BLACK));
				p1PDFTxt.setPreferredSize(dim);		
				gbc = createGBC(1, 1, 1, 1, GridBagConstraints.EAST);
				gbl.setConstraints(p1PDFTxt, gbc);
				p1.add(p1PDFTxt);
				
				
				Dimension dim1 = new Dimension(280, 20);
				JPanel p2 = new JPanel(gbl);		
				p2.setBorder(BorderFactory.createTitledBorder("PanelBorder 2"));
				
				
				JLabel p2Label = new JLabel("TestTestTestTest");				
				gbc = createGBC(0, 2, 1, 1, GridBagConstraints.WEST);
				gbl.setConstraints(p2Label, gbc);
				p2.add(p2Label);
				
			
				JTextField p2Ttxt = new JTextField();		
				p2Ttxt.setBorder(BorderFactory.createLineBorder(Color.BLACK));
				p2Ttxt.setPreferredSize(dim1);		
				gbc = createGBC(1, 2, 1, 1, GridBagConstraints.EAST);
				gbl.setConstraints(p2Ttxt, gbc);
				p2.add(p2Ttxt);
				
				
				JLabel p2PDF = new JLabel("PDF");
				gbc = createGBC(0, 3, 1, 1, GridBagConstraints.WEST);
				gbl.setConstraints(p2PDF, gbc);
				p2.add(p2PDF);
				
				
				JTextField p2PDFTXT = new JTextField();
				p2PDFTXT.setBorder(BorderFactory.createLineBorder(Color.BLACK));
				p2PDFTXT.setPreferredSize(dim1);				
				gbc = createGBC(1, 3, 1, 1, GridBagConstraints.EAST);
				gbl.setConstraints(p2PDFTXT, gbc);
				p2.add(p2PDFTXT);
			
				
				
				centerBox.add(p1);
				centerBox.add(p2);
				
				add(centerBox);
				
				setVisible(true);
	}

	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		new GridBagTest();

	}

}

Gruß
Sdy
 
Zuletzt bearbeitet:
Danke für den Tipp. Ich werd es mal austesten.

Aber wenn es nicht hübsch ist. Wie macht man es denn?

Ich möchte die Labels links haben und dann sollen die TextFields alle gleichzeitig anfangen und gleichzeitig enden. Also alle TextFields eine Länge. Tipp, wie ich das realisieren kann?
 
So, ich habe es mal angepasst.

Die Fenstergröße:

Java:
setMinimumSize(new Dimension(400, 400));

Die TextField-Größe:

Java:
Dimension dim = new Dimension(260, 20);

Und die makeGBC-Methode erweitert:

Java:
private GridBagConstraints createGBC(int x, int y, int width, int height, int anchor){
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.anchor = anchor;
		gbc.insets = new Insets(8, 2, 1, 1);
		gbc.weightx = 1.0;
		return gbc;	
	}

Entsprechend sieht es so aus:



Ist das "hübsch"? 😉

Gruß
Sdy
 
Aber mal eine andere Frage: Ich habe einen MouseListener auf die Felder gelegt. Ich habe die GUI von den Events getrennt. Wie komme ich denn an die einzelnen Textfelder in den mouseClicked-Methoden?!

UPDATE
Hat sich erledigt 😉
 
Zuletzt bearbeitet:
Hey,

zu deinem Problem mit dem rechtsbündig hat JLabel ne ganz hübsche Funktion:

(Falls du es nicht schon selbst gefunden hast)

Link

Gruß
Nametat
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben