LayoutManager Grouplayout

Enigma228

Bekanntes Mitglied
Hi..
ich habe ein Problem mit dem GroupLayout
Das Layout sollte wie im Bild im Anhang sein, aber stattdessen ist die letzte Zeile , wie die davor, zuerst mit l_icon und ptf_icon vom Button ist nichts zu sehen..
d.h. die letzte zeile ist wie die darüber das Label links und nur das Textfeld rechts (Button fehlt, vermutlich überdeckt vom Textfeld)
Da alles anndere an dem Layout funktioniert(ausser die unterste Zeile) denke ich, es liegt ein Fehler in meiner LayoutKonfiguration vor..

Der Button ist auch komplett als Objekt vorhanden und ist auch dem Panel hinzugefügt..

Wo ist mein Denkfehler??

Danke
Thomas

ptf_..... sind Textfelder, l_..... sind JLabel und b_search ist ein JButton
Java:
layout.setHorizontalGroup(layout.createSequentialGroup()
	.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
		.addComponent(l_japanese, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
		.addGroup(layout.createSequentialGroup()
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(l_unicode)
				.addComponent(l_romanji)
				.addComponent(l_german)
				.addComponent(l_english)
				.addComponent(l_icon))
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(ptf_unicode)
				.addComponent(ptf_romanji)
				.addComponent(ptf_german)
				.addComponent(ptf_english)
				.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
					.addComponent(ptf_icon)
					.addComponent(b_search))
			)
		)
	)
);
		
layout.setVerticalGroup(layout.createSequentialGroup()
	.addComponent(l_japanese,50,50,50)
	.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
		.addGroup(layout.createSequentialGroup()
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(l_unicode)
				.addComponent(ptf_unicode,30,30,30))
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(l_romanji)
				.addComponent(ptf_romanji,30,30,30))
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(l_german)
				.addComponent(ptf_german,30,30,30))
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(l_english)
				.addComponent(ptf_english,30,30,30))
			.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(l_icon)
				.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
					.addComponent(ptf_icon,30,30,30)
					.addComponent(b_search,28,28,28))
			)
		)
	)
);
 

Anhänge

  • GroupLayout.jpg
    GroupLayout.jpg
    27,6 KB · Aufrufe: 41

Simon_Flagg

Bekanntes Mitglied
ganz versteh ich dich nicht, was mir aufgefallen ist

ich denke, du hast dich bei der vertical group vertan....
ich würde eine sequentielle group machen --> japanese, und dann eine parallel group mit zwei sequentiellgroup, letzte zeile halt anders

lg
 

Enigma228

Bekanntes Mitglied
hmm.. trotz des Tutorials von Sun habe ich anscheinend das Konzept noch nicht richtig verstanden..
hab jetzt mehrfach rumprobiert und es absolut nicht hinbekommen..

Kennt jemand ein gutes (am besten deutsches Tutorial mit mehreren Bsp.)?
Würde schon gerne Das Konzept dahinter verstehen, da mir das GridbagLayout zu Umfangreich ist (welches ich aber wenigstens verstanden habe.. grins)
 

Enigma228

Bekanntes Mitglied
ich hoffe ihr könnt mir helfen. ich möchte anhand eines einfachen Beispiels GroupLayout verstehen

Das Beispiel beinhaltet 3 Buttons c10,c11,c12
1.Zeile c10 über 2 Spalten
2.Zeile c11 1. Spalte und c12 2.Spalte
_____________
|_____ c10____|
_____________
|_c11__|_c12__|

Zusehen sind leider nur c10 in 1. Spalte und 1. Zeile und c11 in 1. Spalte und 2.Zeile

Was mache ich verkehrt??

Java:
GroupLayout layout2 = new GroupLayout(p2);
/*Horizontal*/
layout2.setHorizontalGroup(layout2.createSequentialGroup().addGroup(layout2.createParallelGroup()
				.addComponent(c10)
				.addComponent(c11)
				.addComponent(c12)));
/*Ende Horizontal*/
		
/*Vertikal*/
layout2.setVerticalGroup(layout2.createSequentialGroup()
				.addComponent(c10)
				.addGroup(layout2.createSequentialGroup().addGroup(layout2.createParallelGroup()
						.addComponent(c11)
						.addComponent(c12))));
/*Ende Vertikal*/
 

hansmueller

Bekanntes Mitglied
Hallo,

Ich habe mal auf die Schnelle deinen Code verändert. Bin mir aber nicht sicher, ob es so funktioniert. Ein KSKB wäre nett.
Java:
GroupLayout layout2 = new GroupLayout(p2);
/*Horizontal*/
layout2.setHorizontalGroup(layout2.createSequentialGroup()
                .addGroup(layout2.createParallelGroup()
                              .addComponent(c10)
                              .addGroup(layout2.createSequentialGroup()
                                            .addComponent(c11)
                                            .addComponent(c12)
                                            )
                              )
                  );
/*Ende Horizontal*/
        
/*Vertikal*/
layout2.setVerticalGroup(layout2.createSequentialGroup()
                .addComponent(c10)
                .addGroup(layout2.createParallelGroup()
                        .addComponent(c11)
                        .addComponent(c12)
                        )
                 );
/*Ende Vertikal*/

MfG
hansmueller
 

Enigma228

Bekanntes Mitglied
Die Positionierung der Buttons ist mit deinem Vorschlag richtig, aber c10 bleibt nur in der ersten Spalte und zieht sich nicht auch über die zweite Spalte..

in diesem Beispiel ist nur das 2. Panel interessant..
ist wie gesagt nur ein Übungsprojekt zum Verstehen..
Java:
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Frame4 extends JFrame {

	private JButton c1,c2,c3,c4,c5,c6,c7,c8;
	private JButton c10,c11,c12,c13,c14,c15,c16,c17;
	private JPanel p1,p2;
	
	public Frame4(){
		initGui();
	}
	public static void main(String[] args) {
		Frame4 f = new Frame4();
		f.setVisible(true);
	}
	public void initGui(){
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(640,480);
		
		c1 = new JButton("c1");
		c2 = new JButton("c2");
		c3 = new JButton("c3");
		c4 = new JButton("c4");
		c5 = new JButton("c5");
		c6 = new JButton("c6");
		c7 = new JButton("c7");
		c8 = new JButton("c8");
		
		p1 = new JPanel();
		GroupLayout layout = new GroupLayout(p1);
		/*Horizontal Layout erstes Panel*/
		layout.setHorizontalGroup(
				   layout.createSequentialGroup()
				      .addComponent(c1)
				      .addComponent(c2)
				      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				           .addComponent(c3)
				           .addComponent(c4)
				           .addComponent(c5))
				      .addComponent(c6, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
		);
		/*Horizontal Ende*/
		/*Vertikal Layout erstes Panel*/
		layout.setVerticalGroup(
				   layout.createSequentialGroup()
				      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				           .addComponent(c1)
				           .addComponent(c2)
				           .addComponent(c3)
				           .addComponent(c6))
				      .addComponent(c4)
				      .addComponent(c5)
		);
		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);
		/*Vertikal Ende*/

		this.setLayout(new GridLayout(2, 1));
		p1.setLayout(layout);
		
		p2= new JPanel();
		
		c10 = new JButton("c10");
		c11 = new JButton("c11");
		c12 = new JButton("c12");
		c13 = new JButton("c13");
		c14 = new JButton("c14");
		c15 = new JButton("c15");
		c16 = new JButton("c16");
		c17 = new JButton("c17");
		
		GroupLayout layout2 = new GroupLayout(p2);
		/*Horizontal Layout zweites Panel*/
		layout2.setHorizontalGroup(layout2.createSequentialGroup()
                .addGroup(layout2.createParallelGroup()
                              .addComponent(c10)
                              .addGroup(layout2.createSequentialGroup()
                                            .addComponent(c11)
                                            .addComponent(c12)
                                            )
                              )
                  );
		/*Ende Horizontal*/
		
		/*Vertikal Layout zweites Panel*/
		layout2.setVerticalGroup(layout2.createSequentialGroup()
                .addComponent(c10)
                .addGroup(layout2.createParallelGroup()
                        .addComponent(c11)
                        .addComponent(c12)
                        )
                 );

		/*Ende Vertikal*/
		p2.setLayout(layout2);
		this.add(p1);
		this.add(p2);
	}
}
 

hansmueller

Bekanntes Mitglied
Hallo,

habe wieder etwas gespielt:

Java:
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
 
public class Frame4 extends JFrame {
 
    private JButton c1,c2,c3,c4,c5,c6,c7,c8;
    private JButton c10,c11,c12,c13,c14,c15,c16,c17;
    private JPanel p1,p2;
    
    public Frame4(){
        initGui();
    }
    public static void main(String[] args) {
        Frame4 f = new Frame4();
        f.setVisible(true);
    }
    public void initGui(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
               
        this.setLayout(new GridLayout(1, 1));
        //this.setLayout(new BorderLayout());
        
        p2= new JPanel();
        
        p2.setBackground(Color.green);
        
        c10 = new JButton("c10");
        c11 = new JButton("c11");
        c12 = new JButton("c12");
        
        
        GroupLayout layout2 = new GroupLayout(p2);
               
        /*Horizontal*/
        layout2.setHorizontalGroup(layout2.createSequentialGroup()
                        .addGroup(layout2.createParallelGroup()
                                      .addComponent(c10, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                      .addGroup(layout2.createSequentialGroup()
                                                    .addComponent(c11, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                    .addComponent(c12, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                    )
                                      )
                          );
        /*Ende Horizontal*/
                
        /*Vertikal*/
        layout2.setVerticalGroup(layout2.createSequentialGroup()
                        .addComponent(c10)
                        .addGroup(layout2.createParallelGroup()
                                .addComponent(c11)
                                .addComponent(c12)
                                )
                         );
        /*Ende Vertikal*/
        
                
        p2.setLayout(layout2);
       
        this.add(p2);
        //this.add(p2, BorderLayout.WEST);
        
        this.pack();//Damit werden die Größen der Komponenten neu berechnet und diese neu angeordnet. Sollte man immer machen, bevor man ein Fenster sichtbar macht.
    }
}

Es kommt auch immer darauf an, welchen Layoutmanager du für das p2 verwendest. Wenn du z. B. einen BorderLayout benutzt und p2 auf WEST hinzufügst, verhält sich p2 ganz anders. Verändere mal die Größe des Fensters mit den Mauszeiger mit jeweils unterschiedlichen Layout-Managern, dann siehst du schon, was ich meine.

Wie man das Verhalten für die Größe der Komponenten anpaßt, kannst du hier nachlesen:
How to Use GroupLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)

Und denk immer daran: Es gibt keinen ultimativen Layoutmanager. Manche Layoutwünsche kann man selbst mit einem mächtigen Layoutmanager nicht so verwirklichen, wie man eigendlich will. Manchmal erreicht man sein Ziel einfacher, indem man zwei oder sogar mehrere Layoutmanager verschachtelt.

MfG
hansmueller
 

Enigma228

Bekanntes Mitglied
Danke.. jetzt hab ich ein Bsp. das ich nachvollziehen kann.. das mit der Grösse hatte ich vorher schon rausgefunden.. ich habe bloss Probleme mit der Positionierung in vertikalen und horizontalen Gruppen und Überlappungen über mehrere Spalten.
Anhand deines Bsp. werde ich wohl nachvollziehen können, wie es genau funktioniert..

Danke
 
Ä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 AWT, Swing, JavaFX & SWT 5
S GroupLayout - wie funktionierts? AWT, Swing, JavaFX & SWT 5
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