Swing Box Label ausrichten

aurikeL_Max

Mitglied
Hallihallo,

ich beschäftige mich gerade mit dem GUI von einem kleinen Projekt und stehe nun vor einem Problem, wobei mein GUI etwa wie folgt aufgebaut ist:
Code:
| _ _ _ _ _ _ _ _ _ _  |
|        . Uhrzeit     |
|        .  Bild       |
|        .  Bild       |
|        .  Text       |
|Label1  .  Label3     |
|Label2  .  Label4     |
| _ _ _ _ _ _ _ _ _ _  |
Die Fläche ist von einer horizontalen Box umgeben, in der sich eine vertikale Box (links - mit "Label1" & "Label2") sowie ein Panel mit einem GridLayout (mit 4 ähnlichen vertikalen Boxen (eine ist davon im Bild dargestellt)) befindet. Mein Problem ist nun, dass ich gerne die (absolute) Höhe von Label3 sowie Label4 ermitteln möchte (diese befinden sich in einer der vertikalen Boxen, die von dem GridLayout umgeben ist), damit ich Label1 sowie Label2 entsprechend ausrichten kann.
Da sich Label1 sowie Label2 ja in der vertikalen Box befinden, kann ich ja über bzw. unter die beiden Labels einen verticalStrut setzen - allerdings müsste ich hierfür die entsprechenden Höhen wissen.
Label3.getY() liefert mir (ich denke aufgrund der Box) 0 zurück, so dass ich mir nicht sicher bin, wie ich an die Y-Position komme.

Liebe Grüße
 
Sowas?
Java:
	public static void main(String[] args)
	{
		JPanel panel1 = new JPanel();
		
		JPanel panel12 = new JPanel();
		JLabel label1 = new JLabel("label1");
		JLabel label2 = new JLabel("label2");
		panel12.setLayout(new GridLayout(0,1));
		panel12.add(label1);
		panel12.add(label2);
		
		JPanel panel13 = new JPanel();
		JLabel uhrzeit = new JLabel("uhrzeit");
		JLabel bild1 = new JLabel("bild1");
		JLabel bild2 = new JLabel("bild2");
		JLabel text = new JLabel("text");
		JLabel label3 = new JLabel("label3");
		JLabel label4 = new JLabel("label4");
		panel13.setLayout(new GridLayout(0,1));
		panel13.add(uhrzeit);
		panel13.add(bild1);
		panel13.add(bild2);
		panel13.add(text);
		panel13.add(label3);
		panel13.add(label4);
		
		panel1.setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		c.weightx=1;
		
		c.anchor=GridBagConstraints.PAGE_END;
		panel1.add(panel12,c);
		c.anchor=GridBagConstraints.PAGE_START;
		panel1.add(panel13,c);
		
		
		JFrame f = new JFrame();
		f.add(panel1);
		f.pack();
		f.setPreferredSize(new Dimension(300,300));
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		
		
	}
 
Hallo Java-Welt :applaus:
dein Beispiel meint genau das, was ich suche - allerdings hab ich nun versucht, lediglich ein GridBagLayout und gar kein GridLayout mehr zu verwenden (da ich gelesen hatte, dass hier alle Felder die gleiche Breite / Höhe haben, was zwar bei der Breite stimmt, bei der Höhe jedoch nicht (dann hätten die Felder der Lables ja auch die Höhe des Bildes)).

Mein bisheriger Ansatz:
Java:
		setLayout(new GridBagLayout()); // main Layout
		GridBagConstraints c = new GridBagConstraints();

		lblDate = new JLabel();
		c.fill = GridBagConstraints.HORIZONTAL;
		c.anchor = GridBagConstraints.LINE_START;
		c.gridwidth = 5;  
		c.gridx = 0;
		c.gridy = 0;
		add(lblDate, c);
		c.gridwidth = 1;

		c.gridy = 3;
		JLabel lblDescr = new JLabel("Label 1");
		add(lblDescr, c);

		c.gridy = 4;
		JLabel lblProb = new JLabel("Label 2");
		add(lblProb, c);

		c.anchor = GridBagConstraints.CENTER;
		c.fill = GridBagConstraints.VERTICAL;
		for (int i = 0; i < 4; i++) {
			c.gridx = i + 1;
			timeLabelArray[i] = new JLabel("Uhrzeit");
			c.gridy = 1;
			add(timeLabelArray[i], c);

			c.gridy = 2;
			pictureLabelArray[i] = new JLabel();
			add(pictureLabelArray[i], c);

			c.gridy = 3;
			descrLabelArray[i] = new JLabel("Label 3");
			add(descrLabelArray[i], c);

			c.gridy = 4;
			rainProbLabelArray[i] = new JLabel("Label 4");
			add(rainProbLabelArray[i], c);
		}

Mein Problem ist nun allerdings, dass die Labels im descrLabelArray (Label 3 aus dem Beispiel) einen unterschiedlichen Text haben können, wodurch unterschiedliche Breiten entstehen (ich hab mal einen Screenshot hochgeladen, der das Problem hoffentlich verdeutlicht).
Den obigen Quellcode rufe ich im Konstruktor einer Klasse auf und erst danach befülle ich die verschiedenen Labels etc. mit Werten (über eine zusätzliche Methode). Müsste ich nach dem Befüllen mit Werten ansetzen und die höchste Breite einer Spalte ermitteln und die Breite dann für die anderen Spalten setzen oder gibt es möglicherweise einen viel einfacheren Weg (können die Spalten auch einen fixen width-Wert haben)?

Liebe Grüße.
 

Anhänge

  • Capture.PNG
    Capture.PNG
    5,4 KB · Aufrufe: 27
Zuletzt bearbeitet:

Zurück
Oben