GroupLayout

sh

Aktives Mitglied
Hallo,
ich hatte vor kurzem ein Problem mit GroupLayout() im Topic (JAVA-FORUM) GroupLayout() - wie funktioniert's?, habs mittlerweile auch so halbwegs verstanden wie das Ganze funktioniert aber Häng nun doch wieder fest mit folgendem Code:
Java:
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

 
@SuppressWarnings("serial")
public class Test extends JFrame {
 
	public Test() {
	    	createMainGUI();
	    	
	        setMinimumSize(new Dimension(340, 300));
	        setPreferredSize(new Dimension(740, 480));
	        setTitle("Test GUI");
	        pack();
	        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	        setLocationRelativeTo(null);
	}
	
	private void createMainGUI() {
		GroupLayout layout = new GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);
		
		JLabel artistLabel = new JLabel("Artist:"), titleLabel = new JLabel("Title:");
		
		JTextField artistTextField = new JTextField(), titleTextField = new JTextField();
	
		JButton swapButton = new JButton("Swap");
		
		layout.setHorizontalGroup(layout.createSequentialGroup()
				.addGroup(layout.createParallelGroup(Alignment.LEADING)
						.addComponent(artistLabel)
						.addComponent(titleLabel)
				)
				.addGroup(layout.createParallelGroup(Alignment.LEADING)
						.addComponent(artistTextField)
						.addComponent(titleTextField)
				)
				.addComponent(swapButton)
		);
	
		layout.setVerticalGroup(layout.createSequentialGroup()
				.addGroup(layout.createParallelGroup(Alignment.BASELINE)
						.addComponent(artistLabel)
						.addComponent(artistTextField)
				)
				.addGroup(layout.createParallelGroup(Alignment.BASELINE)
						.addComponent(titleLabel)
						.addComponent(titleTextField)
						
				)
				.addComponent(swapButton)
		);
	}
	
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                new Test().setVisible(true);
            }
        });
    }
	
}
Das Produziert eine GUI wie im Anhang test-1.png.



Wenn ich den Code von layout.setVerticalGroup(layout.createSequentialGroup() auf:
Java:
		layout.setVerticalGroup(layout.createSequentialGroup()
				.addGroup(layout.createParallelGroup(Alignment.BASELINE)
						.addComponent(artistLabel)
						.addComponent(artistTextField)
						.addComponent(swapButton)
				)
				.addGroup(layout.createParallelGroup(Alignment.BASELINE)
						.addComponent(titleLabel)
						.addComponent(titleTextField)
						.addComponent(swapButton)
				)
		);
änder dann liegt der Button zumindest schonmal Vertikal-parallel zu dem Rest vom Formular (siehe test-2.png im Anhang).

Allerdings will ich auch das er die Höhe von beiden JTextFields zusammen (mit der Gap dazwischen) hat, also wie im ziel.png (Anhang).

Irgendwelche Ideen wie ich das umsetzen kann? Und ja, ich will es mit GroupLayout() machen und nicht mit BorderLayout() und anderen ;-)

MfG
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Genau wie beim Letzten Beispiel, von oben nach unten die Komponenten durchgehen:
Java:
  |
  v 
     _
A   |
B   |_

(Das soll ein großes C sein :D)

Java:
Wenn du hier oben anfängst, stößt du zuerst auf ein A und ein C, die sich eine Zeile Teilen.
-> ParallelGroup
         Nach dem A kommt noch ein B 
         -> SequentialGroup
                     >A
                     >B
         Das C ganz normal
         -> C
 
Zuletzt bearbeitet:

sh

Aktives Mitglied
Danke für deine Hilfe bERt0,

allerdings krieg ichs auch mit deiner Anleitung noch nicht gebacken.
Im Anhang mal das Ergebnis, hier nochmal der Code für die Horizontale sowie Vertikale:
Java:
		layout.setHorizontalGroup(layout.createSequentialGroup()
				.addGroup(layout.createParallelGroup(Alignment.LEADING)
						.addComponent(artistLabel)
						.addComponent(titleLabel)
				)
				.addGroup(layout.createParallelGroup(Alignment.LEADING)
						.addComponent(artistTextField)
						.addComponent(titleTextField)
				)
				.addComponent(swapButton)
		);
	
		layout.setVerticalGroup(layout.createParallelGroup(Alignment.BASELINE)
				.addGroup(layout.createSequentialGroup()
						.addComponent(artistLabel)
						.addComponent(titleLabel)
				)
				.addGroup(layout.createSequentialGroup()
						.addComponent(artistTextField)
						.addComponent(titleTextField)
				)
				.addComponent(swapButton)
		);

Irgendwie scheint in layout.setVerticalGroup(layout.createParallelGroup(Alignment.BASELINE) das Alignment.BASELINE keine Wirkung zu haben.

Was mach ich falsch?

MfG
 

bERt0r

Top Contributor
Ok, da wirds ein bisschen trickreich - und du musst mit Gaps und den Size Angaben umgehen können. Da ich mal wieder keinen Schlaf kriege, hier bitte:

Java:
GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setAutoCreateGaps(true);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createSequentialGroup()
				.addGroup(gl_contentPane.createSequentialGroup()
						.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
								.addComponent(label1).addComponent(label2)
								)
						.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
								.addComponent(textField1).addComponent(textField2)
								)
						)
				.addComponent(btnNewButton)
				);
				
				
				
				
		gl_contentPane.setVerticalGroup(
				gl_contentPane.createSequentialGroup()
				.addGroup(
						gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
								.addGroup(gl_contentPane.createParallelGroup()
										.addComponent(label1).addComponent(textField1,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE)
										)
								.addGroup(gl_contentPane.createParallelGroup()
										.addComponent(label2)
										.addComponent(textField2,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE,GroupLayout.PREFERRED_SIZE)
										)
								)
						.addComponent(btnNewButton,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE,Short.MAX_VALUE)
						)
				.addGap(0, Short.MAX_VALUE, Short.MAX_VALUE)
				);
Wenn du was nicht verstehst frag.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Grouplayout-Probem AWT, Swing, JavaFX & SWT 3
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
R LayoutManager GroupLayout - Tipps? AWT, Swing, JavaFX & SWT 2
M Swing JSeparator in GroupLayout AWT, Swing, JavaFX & SWT 0
S LayoutManager GroupLayout - Beste Wahl? AWT, Swing, JavaFX & SWT 3
O GroupLayout - TRAILING Alignment AWT, Swing, JavaFX & SWT 2
O Swing GroupLayout und Scrollpane AWT, Swing, JavaFX & SWT 3
P LayoutManager GroupLayout an dem rechten Rand ausrichten AWT, Swing, JavaFX & SWT 2
P Swing GroupLayout() Fehler? AWT, Swing, JavaFX & SWT 3
S GroupLayout transient AWT, Swing, JavaFX & SWT 2
V LayoutManager GroupLayout Problem AWT, Swing, JavaFX & SWT 3
S GroupLayout - wie funktionierts? AWT, Swing, JavaFX & SWT 5
E LayoutManager Grouplayout AWT, Swing, JavaFX & SWT 7
S Swing Inhalt eines Fenster bei Größenänderung anpassen (GroupLayout) AWT, Swing, JavaFX & SWT 2
N Fehler bei Grouplayout AWT, Swing, JavaFX & SWT 17
M Swing GroupLayout unter Java 1.5 AWT, Swing, JavaFX & SWT 20
D GroupLayout an un plötzlich is CardLayout Funktion tot? AWT, Swing, JavaFX & SWT 10
M GroupLayout in JREs vor Version 6 AWT, Swing, JavaFX & SWT 2
F Java6 GroupLayout Frage zu addGap() AWT, Swing, JavaFX & SWT 4
J Compilerfehler: javax.swing.GroupLayout nicht gefunden AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen


Oben