Swing Variable Elemente für GroupLayout

Gerald

Mitglied
Hallo Ihr Experten!
Auf einem Frame lasse ich farbige Rechtecke (zu x Spalten und y Zeilen )
anzeigen (JPanel). Das funktioniert einwandfrei.
Java:
      GroupLayout layout = new GroupLayout(p);
      p.setLayout(layout);

      JPanel p1 = new JPanel();
      JPanel p2 = new JPanel();
      ...
      p1.setBackground(new java.awt.Color(255, 0, 0));
      p2.setBack ...

      SequentialGroup verticalGroup = layout.createSequentialGroup();
      verticalGroup.addGroup(layout.createParallelGroup())
                            .addComponent(p1)
                            .addComponent(p2)
                            ...
      ParallelGroup horizontalGroup = layout.createParallelGroup();
      horizontalGroup.addGroup(layout.createSequentialGroup()
                            .addComponent(p1)
                            .addComponent(p2)
                            ...
      layout.setVerticalGroup(verticalGroup);
      layout.setHorizontalGroup(horizontalGroup);
      ...
Nun will soll aber die Anzahl Spalten und Zeilen beliebig wählbar sein (Abfrage
vor Rechteckanzeige).
Verschiedenes habe ich probiert, bin aber zu keinem brauchbaren Ergebnis
gekommen.

Folgendes ist keine Lösung:
horizontalGroup.addGroup(layout.createSequentialGroup());
horizontalGroup.addComponent(p1);
horizontalGroup.addComponent(p2);
...
Das auch nicht:
horizontalGroup.addGroup(layout.createSequentialGroup().addComponent(p1));
horizontalGroup.addGroup(layout.createSequentialGroup().addComponent(p2));
...
Das wohl auch nicht:
layout.addLayoutComponent("p1", p1);
layout.addLayoutComponent("p2", p2); ...

Wie kann man beliebig viele Elemente (in einer Schleife [Array, Zähler]) zu
einer Gruppe hinzufügen? Wie kann ich Elemente "addieren"?

Im Java-Forum habe ich (noch) keine Antwort gefunden. Das Problem ist aber wohl
kein allzu großes.?

Im Voraus vielen Dank für "Eure" Bemühungen!
Mit freundlichen Grüßen
Gerald
 

mihe7

Top Contributor
Wenn Dein Code oben funktioniert, dann würde ich spontan sagen:
Java:
ParallelGroup verticalSubGroup = layout.createParallelGroup();
SequentialGroup horizontalSubGroup = layout.createSequentialGroup();
for (JPanel p : panels) {
    verticalSubGroup.add(p);
    horizontalSubGroup.add(p);
}
verticalGroup.addGroup(verticalSubGroup);
horizontalGroup.addGroup(horizontalSubGroup);
 

Gerald

Mitglied
Hallo mihe7,
danke für Deine Antwort. Aber leider funktioniert es nicht.
"verticalSubGroup.add(p1);" wird nicht angenommen, meine Entwicklungsumgebung bemängelt es als Fehler.
Es wird nur "addComponent" und "addGroup" angenommen.

Ich sollte wohl für die Interessierten noch ein wenig ausführlicher sein.
Die Aufgabe besteht darin, daß "addComponent" immer separat in einer einzigen Quelltextzeile notiert werden soll. (Ja, so wie es mihe7 gemacht hat.)
Etwa so:
Java:
      horizontalGroup.addGroup(layout.createSequentialGroup());
      for (int i; i < 10; i++) {
          ???.addComponent(p[i]);
    }
An welches Code-Schnipselchen sollte ich "addComponent(?)" ranhängen? An "...addGroup" muß ausfallen, da sonst immer noch eine neue Gruppe erstellt würde, oder nicht?
Man bräuchte so etwas wie "getGroup".
Oder man hängt es an "layout...", aber wie?
 

mihe7

Top Contributor
Es wird nur "addComponent"
Sorry, muss addComponent heißen:

Java:
ParallelGroup verticalSubGroup = layout.createParallelGroup();
SequentialGroup horizontalSubGroup = layout.createSequentialGroup();
for (JPanel p : panels) {
    verticalSubGroup.addComponent(p);
    horizontalSubGroup.addComponent(p);
}
verticalGroup.addGroup(verticalSubGroup);
horizontalGroup.addGroup(horizontalSubGroup);
 

Gerald

Mitglied
Hallo mihe7.
Es funktioniert (noch) nicht. In Deiner "for"-Schleife wird jedes JPanel sowohl der verticalSubGroup als auch der horizontalSubGroup zugeordnet. Detailproblem: Ich wollte mit Array in der Schleife arbeiten. Deinen Vorschlag verstehe ich nicht ganz (,habe mich bis jetzt davor gedrückt). Was ist für "panels" zu notieren (irgendeine Liste?)?
 

Gerald

Mitglied
Mal abgesehen von der Frage zu "panels", müßte es doch auch so funktionieren:
Java:
verticalSubGroup.addComponent(p1).addComponent(p2);
horizontalSubGroup.addComponent(p1).addComponent(p2);
... sofern p1 und p2 vorher vereinbart wurden?
 

mihe7

Top Contributor
In Deiner "for"-Schleife wird jedes JPanel sowohl der verticalSubGroup als auch der horizontalSubGroup zugeordnet.
Ja, das hab ich von Dir übernommen (s. Dein ersten Post):
Code:
layout.createParallelGroup())
                            .addComponent(p1)
                            .addComponent(p2)
layout.createSequentialGroup()
                            .addComponent(p1)
                            .addComponent(p2)[/QUOTE]

Wobei ich gerade sehe, dass Du im ersten Fall nicht zu layout.createParallelGroup() hinzufügst sondern zur verticalGroup.

Neuer Versuch (sorry, ich schreibe das nur hier nebenbei rein, da übersehe ich leicht was):

Java:
verticalGroup.addGroup(layout.createParallelGroup());
SequentialGroup horizontalSubGroup = layout.createSequentialGroup();
for (JPanel p : panels) {
    verticalGroup.addComponent(p);
    horizontalSubGroup.addComponent(p);
}
horizontalGroup.addGroup(horizontalSubGroup);

Was ist für "panels" zu notieren (irgendeine Liste?)?
Irgendwas, worüber iterierbar ist :) Kann eine Collection sein, oder auch ein Array sein.
 

Gerald

Mitglied
Hallo mihe7.
Tut mir leid, es funktioniert nicht. Habe den Fehler gemacht mir nicht alle Zwischenstände mit dem Code aufzuheben. So bin ich wohl durcheinandergekommen. Eventuell ist doch etwas falsch vertauscht worden.
Ich liste hier mal den Gesamttext. Wenn Du das so nebenbei machst, dann lass Dir Zeit. Es ist nicht eilig, aber wichtig.
Java:
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test5 {
    public static void main(String[] args) {
        JFrame f = new JFrame("Test 5");
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   
        JPanel pnl = new JPanel();
        GroupLayout layout = new GroupLayout(pnl);
        layout.setAutoCreateGaps(true);
        pnl.setLayout(layout);
   
        JPanel p1 = new JPanel();        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();        JPanel p4 = new JPanel();
        p1.setPreferredSize(new Dimension(60, 70));
        p2.setPreferredSize(new Dimension(60, 70));
        p3.setPreferredSize(new Dimension(60, 70));
        p4.setPreferredSize(new Dimension(60, 70));
        p1.setBackground(new java.awt.Color(255, 0, 0));
        p2.setBackground(new java.awt.Color(0, 255, 0));
        p3.setBackground(new java.awt.Color(127, 0, 0));
        p4.setBackground(new java.awt.Color(0, 127, 0));
       
        SequentialGroup horizontalGroup = layout.createSequentialGroup();
        ParallelGroup verticalGroup = layout.createParallelGroup();
       
        ParallelGroup verticalSubGroup = layout.createParallelGroup();
        SequentialGroup horizontalSubGroup = layout.createSequentialGroup();
       
        JPanel panels[] = {p1, p2, p3, p4};
        for (JPanel p : panels) {
            verticalSubGroup.addComponent(p);
            horizontalSubGroup.addComponent(p);
        }
        verticalGroup.addGroup(verticalSubGroup);
        horizontalGroup.addGroup(horizontalSubGroup);
       
        f.add(pnl);
        f.pack();
        f.setVisible(true);
    }
}
 

Gerald

Mitglied
Ich grüble, es sollten doch 2 x 2 Panels angezeigt werden. Müßten da nicht auch jeweils 2 vert. und horz. Gruppen aufgemacht werden? Die Auflistung "{p1, p2, p3, p4}" ist doch nicht richtig, oder?
 

Gerald

Mitglied
Hallo!
Ich hatte etwas vergessen:
Java:
        layout.setVerticalGroup(verticalGroup);
        layout.setHorizontalGroup(horizontalGroup);
Das Problem mit 2 x 2 Elementen wird auch lösbar sein.
Vielen Dank an mihe7!
 

Gerald

Mitglied
Bin begeistert! Es funktioniert!
(Es mußte doch etwas zurückgetauscht werden.)
Hier der vollständige Quelltext, für Leute die es interessiert:
Java:
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test5 {
    public static void main(String[] args) {
        JFrame f = new JFrame("Test 5");
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   
        JPanel pnl = new JPanel();
        GroupLayout layout = new GroupLayout(pnl);
        layout.setAutoCreateGaps(true);
        pnl.setLayout(layout);
   
        JPanel p1 = new JPanel();        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();        JPanel p4 = new JPanel();
        p1.setPreferredSize(new Dimension(60, 70));
        p2.setPreferredSize(new Dimension(60, 70));
        p3.setPreferredSize(new Dimension(60, 70));
        p4.setPreferredSize(new Dimension(60, 70));
        p1.setBackground(new java.awt.Color(255, 0, 0));
        p2.setBackground(new java.awt.Color(0, 255, 0));
        p3.setBackground(new java.awt.Color(127, 0, 0));
        p4.setBackground(new java.awt.Color(0, 127, 0));

        ParallelGroup horizontalGroup = layout.createParallelGroup();
        SequentialGroup verticalGroup = layout.createSequentialGroup();
       
        ParallelGroup verticalSubGroup1 = layout.createParallelGroup();
        SequentialGroup horizontalSubGroup1 = layout.createSequentialGroup();
       
        ParallelGroup verticalSubGroup2 = layout.createParallelGroup();
        SequentialGroup horizontalSubGroup2 = layout.createSequentialGroup();
       
        JPanel panels1[] = {p1, p2};
        for (JPanel p : panels1) {
            verticalSubGroup1.addComponent(p);
            horizontalSubGroup1.addComponent(p);
        }
        JPanel panels2[] = {p3, p4};
        for (JPanel p : panels2) {
            verticalSubGroup2.addComponent(p);
            horizontalSubGroup2.addComponent(p);
        }
       
        verticalGroup.addGroup(verticalSubGroup1)
                     .addGroup(verticalSubGroup2);
        horizontalGroup.addGroup(horizontalSubGroup1)
                       .addGroup(horizontalSubGroup2);
        layout.setVerticalGroup(verticalGroup);
        layout.setHorizontalGroup(horizontalGroup);
        f.add(pnl);
        f.pack();
        f.setVisible(true);
    }
}
 

mihe7

Top Contributor
Huch, das mit dynamischer Spaltenzahl hatte ich ganz übersehen.

Nicht schön, aber selten: ;)

Java:
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test5 {
    public static void main(String[] args) {
        JFrame f = new JFrame("Test 5");
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        JPanel pnl = new JPanel();
        GroupLayout layout = new GroupLayout(pnl);
        layout.setAutoCreateGaps(true);
        pnl.setLayout(layout);

        JPanel p1 = new JPanel();        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();        JPanel p4 = new JPanel();
        JPanel p5 = new JPanel();        JPanel p6 = new JPanel();
        p1.setPreferredSize(new Dimension(60, 70));
        p2.setPreferredSize(new Dimension(60, 70));
        p3.setPreferredSize(new Dimension(60, 70));
        p4.setPreferredSize(new Dimension(60, 70));
        p5.setPreferredSize(new Dimension(60, 70));
        p6.setPreferredSize(new Dimension(60, 70));
        p1.setBackground(new java.awt.Color(255, 0, 0));
        p2.setBackground(new java.awt.Color(0, 255, 0));
        p3.setBackground(new java.awt.Color(127, 0, 0));
        p4.setBackground(new java.awt.Color(0, 127, 0));
        p5.setBackground(new java.awt.Color(255, 127, 0));
        p6.setBackground(new java.awt.Color(0, 127, 255));

        JPanel panels[] = {p1, p2, p3, p4, p5, p6};

        layout(layout, panels, 3);

        f.add(pnl);
        f.pack();
        f.setVisible(true);
    }

    private static void layout(GroupLayout layout, JPanel[] panels, int cols) {
        SequentialGroup verticalGroup = layout.createSequentialGroup();
        SequentialGroup horizontalGroup = layout.createSequentialGroup();

        int rows = panels.length / cols;
        if (rows * cols != panels.length) {
            throw new IllegalArgumentException("All rows must be filled");
        }

        ParallelGroup[] stacked = new ParallelGroup[cols];
        ParallelGroup[] aside = new ParallelGroup[rows];

        initLayout(layout, horizontalGroup, stacked);
        initLayout(layout, verticalGroup, aside);
        for (int i = 0; i < cols; i++) {
            for (int j = 0; j < rows; j++) {
                stacked[i].addComponent(panels[j*cols + i]);
                aside[j].addComponent(panels[j*cols + i]);
            }
        }

        layout.setHorizontalGroup(horizontalGroup);
        layout.setVerticalGroup(verticalGroup);
    }

    private static void initLayout(GroupLayout layout, SequentialGroup group,
                            ParallelGroup[] init) {
        for (int i = 0; i < init.length; i++) {
            init[i] = layout.createParallelGroup();
            group.addGroup(init[i]);
        }
    }
}
 

Gerald

Mitglied
Nachtrag:
Habe den Kode nochmal geändert. Der von mihe7 ist zwar kompakter, aber für das bessere Verständnis ist ein bisschen länger wahrscheinlich besser.
Aber, mein neuer Kode hat einen Fehler. Habe lange probiert, finde ihn jedoch nicht nicht.
Der wohl unkritische Teil hier:
Java:
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GroupLayoutDemo {
    private void go(int xSize, int ySize, boolean colors, int cols, int rows) {
        int zPanel, i, xP, yP; JPanel panels[];
      
        JFrame f = new JFrame("GroupLayoutDemo");
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        JPanel pnl = new JPanel();
        GroupLayout layout = new GroupLayout(pnl);
        pnl.setLayout(layout);
        f.add(pnl);

        xP = xSize / cols;
        yP = ySize / rows;
      
        zPanel = cols * rows;
        panels = new JPanel[zPanel];
        for (i = 0; i < zPanel; i++) {
            panels[i] = new JPanel();
            panels[i].setPreferredSize(new Dimension(xP, yP));
            JLabel l = new JLabel(String.valueOf(i));
            panels[i].add(l);
            if (colors) {//Alles bunt:
                int col1 = getCol(); int col2 = getCol(); int col3 = getCol();
                panels[i].setBackground(new java.awt.Color(col1, col2, col3));
            }
            else {//Alles Grautöne:
                int col = getCol();                    
                panels[i].setBackground(new java.awt.Color(col, col, col));
            }
        }
        layoutGl(layout, panels, cols, rows);
        f.setSize(xSize, ySize);
        f.setVisible(true);
    }

    private static int getCol () {
        return (int) (Math.random() * 255);
    }

    public static void main(String[] args) {
        GroupLayoutDemo gl = new GroupLayoutDemo();
        gl.go(240, 180, true, 2, 5);   //dims, color?, cols, rows
    }
}
Die Fehlerquelle muß hier liegen (Fehlermöglichkeit A oder Fehlermöglichkeit B):
Java:
    private static void layoutGl(GroupLayout layout, JPanel[] panels
                                                   , int cols, int rows) {
        SequentialGroup seqGroup = layout.createSequentialGroup();
        ParallelGroup parGroup = layout.createParallelGroup();

        SequentialGroup[] seqGroup2 = new SequentialGroup[cols];
        ParallelGroup[] parGroup2 = new ParallelGroup[rows];
      
        initLayoutSeq(layout, seqGroup, parGroup2);
        initLayoutPar(layout, parGroup, seqGroup2);
      
        for (int i = 0; i < cols; i++)    //Fehlermöglichkeit A
            for (int j = 0; j < rows; j++) {
                parGroup2[j].addComponent(panels[i * rows + j]);
                System.out.println("col(i):" + i + " row(j):" + j
                                 + "   panel:" + (i * rows + j));
            }
                                            System.out.println();
        for (int j = 0; j < rows; j++)    //Fehlermöglichkeit A
            for (int i = 0; i < cols; i++) {
                seqGroup2[i].addComponent(panels[j * cols + i]);
                System.out.println("row(j):" + j + " col(i):" + i
                                 + "   panel:" + (j * cols + i));
            }
        layout.setVerticalGroup(seqGroup);
        layout.setHorizontalGroup(parGroup);
    }
  
    private static void initLayoutSeq(GroupLayout layout
                                    , SequentialGroup seqGroup
                                    , ParallelGroup[] parGroup2) {//Fehlermöglichkeit B
        for (int i = 0; i < parGroup2.length; i++) {
            parGroup2[i] = layout.createParallelGroup();
            seqGroup.addGroup(parGroup2[i]);
        }
    }
  
    private static void initLayoutPar(GroupLayout layout
                                    , ParallelGroup parGroup
                                    , SequentialGroup[] seqGroup2) {//Fehlermöglichkeit B
        for (int i = 0; i < seqGroup2.length; i++) {
            seqGroup2[i] = layout.createSequentialGroup();
            parGroup.addGroup(seqGroup2[i]);
        }
    }
Auffallend ist, daß bei Angabe von 2 Spalten dann die Programmausgabe (angeordnete Panels) bei jeweils 2 vertikalen Panels "nach rechts springt"; die Ausgabe wird "zerwürfelt".
Ich glaube, daß kein prinzipieller Entwurfsfehler vorliegt, sondern ein Verdreher im Kode. Ich lasse mich aber gerne belehren.
Im Voraus vielen Dank für hilfreiche Hinweise.
 

mihe7

Top Contributor
Der Fehler liegt vermutlich darin, dass Du parallele und sequentielle Gruppen hinzufügst (initLayoutPar/Seq) bzw. vertauschst.

Jede Spalte besteht aus einer Menge vertikal parallel angeordneter Komponenten. Diese werden sequentiell hintereinander angeordnet. Umgekehrt besteht jede Zeile aus einer Menge horizontal parallel angeordneter Komponenten, diese werden sequentiell untereinander angeordnet.
 

Gerald

Mitglied
Hallo mihe7,
sollte Deiner Meinung nach das Auftrennen in eindeutig parallele und sequentielle Gruppen die Fehlerursache sein? Das glaube ich aber nicht. Mit dem Aufteilen wird mir und eventuell anderen Lesern doch die Funktion besser verständlich, oder nicht?
Da bei einer "symmetrischen" Angabe von Spalten und Zeilen (z. B.: cols=3, rows=3) alles (scheinbar?) in Ordnung ist, bin ich von der prinzipiellen Richtigkeit der Aufteilung überzeugt.
Java:
        for (int i = 0; i < cols; i++)
            for (int j = 0; j < rows; j++) {
                parGroup2[j].addComponent(panels[i * rows + j]);
                System.out.println("col(i):" + i + " row(j):" + j + "   panel:" + (i * rows + j));
            }
Ich versuche mal, Deine letze Antwort präzise wiederzugeben:
Jede Spalte (cols) besteht aus einer Menge vertikal (übereinander) angeordneter paralleler Komponenten parGroup2 (wird mit dem Schleifenzähler j (rows) durchlaufen) .
In jeder neuen Zeile (j) werden die Komponenten (panels) angehangen. Erhöht sich der Wert i (cols) werden erneut an parGroup2 Panels (Zugriff auf weitere P.) angehangen.

Für die Zeilenauffüllung sollte Analoges gelten.
Java:
        for (int j = 0; j < rows; j++)
            for (int i = 0; i < cols; i++) {
                seqGroup2[i].addComponent(panels[j * cols + i]);
                System.out.println("row(j):" + j + " col(i):" + i
                                 + "   panel:" + (j * cols + i));
            }
Jede Zeile (rows) besteht aus einer Menge horizontal (nebeneinander) angeordneter sequentieller (?) Komponenten seqGroup2 (wird mit dem Schleifenzähler i (cols) durchlaufen).
In jeder neuen Spalte (i) werden die Komponenten (panels) angehangen.

Ist das korrekt (sequentieller (?)...)?
Werden die Panels durch:
Java:
              seqGroup2[i].addComponent(panels[j * cols + i]);
untereinander angehangen?
 

mihe7

Top Contributor
Wenn ich mir https://docs.oracle.com/javase/tutorial/uiswing/layout/group.html ansehe, dann würde ein Layout für die erste Zeile so aussehen:

horizontalLayout = sequential_group(c_00, c_01, ... c_0m)
verticalLayout = parallel_group(c_00, c_01, ... c_0m)

Resultat: c_00 c_01 c_02 ... c_0m

Will man z. B. zwei Zeilen

c_00 c_01 c_02 ... c_0m
c_10 c_11 c_12 ... c_1m

haben, würde das Layout aber so aussehen:

horizontalLayout = sequential_group(
parallel_group(c_00, c_10),
parallel_group(c_01, c_11),
parallel_group(c_02, c_12),
...
parallel_group(c_0m, c_1m)
)
verticalLayout = sequential_group(
parallel_group(c_00, c_01, ..., c_0m),
parallel_group(c_10, c_11, ..., c_1m)
)

Hier sind die Komponenten immer in einer parallelen Gruppe - Du fügst sie aber teilweise in einer sequentielle Gruppe ein.

Mit dem Aufteilen wird mir und eventuell anderen Lesern doch die Funktion besser verständlich, oder nicht?

Das kann ich nicht beurteilen :)
 

Gerald

Mitglied
Habe Zeit gehabt nachzudenken. Das Ergebis: der folgende Kode reiht die Komponenten (panels) wohl doch nicht untereinander, sondern fügt die Panels jeweils neu horizontal an.
Java:
seqGroup2[i].addComponent(panels[j * cols + i]);
Auch die Annahme sequentiell heißt immer senkrecht, stimmt wohl nicht.

Ich bitte um Bestätigung oder Ablehnung dieser meiner Annahmen.
Mich hatte immer gewurmt, daß horizontalLayout = sequential_group und auch verticalLayout = sequential_group gelten sollte.
Falls Jemand meine Annahmen bestätigt, finde ich wieder meinen Frieden. :)
 

mihe7

Top Contributor
Sequentiell heißt einfach nacheinander, unabhängig von der Richtung.

Nehmen wir mal
Code:
c1
c2
c3
Dann sind die Komponenten in vertikaler Richtung sequentiell, in horizontaler Richtung parallel.
horizontal = parallel_group{c1, c2, c3}
vertical = sequential_group{c1, c2, c3}

Parallele und sequentielle Gruppe sind somit wie im Beispiel aus meinem letzten Beitrag - jedoch vertauscht.

Will ich jetzt eine zweite Spalte mit c4, c5, c6, dann hat man horizontal zwei parallele Gruppen: parallel_group{c1, c2, c3} (wie gehabt), parallel_group{c4, c5, c6}. Die beiden Gruppen sollen aber nebeneinander stehen, also sequentiell eingefügt werden:
horizontal = sequential_group{
parallel_group{c1, c2, c3}
parallel_group{c4, c5, c6}
}

In vertikaler Richtung ist es ähnlich: durch die zweite Spalte, entstehen drei parallele Gruppen parallel_group{c1, c4}, parallel_group{c2, c5}, parallel_group{c3, c6}. Da diese in vertikaler Richtung nacheinander kommen sollen, werden sie ebenfalls sequentiell eingefügt:

vertical = sequential_group{
parallel_group{c1, c4},
parallel_group{c2, c5},
parallel_group{c3, c6}
}

Insgesamt erhält man also
Code:
c1 c4
c2 c5
c3 c6

Mit deinem Code erzeugst Du, wenn ich nichts übersehen habe, für die sechs Komponenten folgendes Layout

horizontal = parallel_group{
sequential_group{c1, c2, c3}
sequential_group{c4, c5, c6},
}

vertical = sequential_group{
parallel_group{c1, c4},
parallel_group{c2, c5},
parallel_group{c3, c6},
}

D. h. horizontal liegen c1, c2, c3 nebeneinander, auch c4, c5, c6. Diese beiden "Blöcke" liegen in der gleichen "Spalte"
Code:
+--------------+
| c1 | c2 | c3 |
| c4 | c5 | c6 |
+--------------+

Gleichzeitig sagst Du in vertikaler Richtung, dass c1 und c4 in einer Zeile liegen sollen, ebenso c2, c5 und c3, c6. Die drei Zeilen sollen untereinander stehen:
Code:
+-------+
| c1 c4 |
+-------+
| c2 c5 |
+-------+
| c3 c6 |
+-------+
Das passt nicht zusammen.

EDIT: wenn ich es mir recht überlege, müsste eigentlich etwas in der Richtung rauskommen:
Code:
+-------+
| c1 c4 |
+-------+-------+
        | c2 c5 |
        +-------+-------+
                | c3 c6 |
                +-------+
 

Gerald

Mitglied
An mihe7: Danke für Deine hilfreichen Erklärungen! Mir hätte schon ein einfaches "Ja" oder "Nein" gereicht. Aber auch Andere wollen etwas lernen, deßhalb sind Deine Erklärungen einfach klasse.

Man könnte fragen, wie ich zu meiner Fehlinterpretation gekommen bin. Durch ein Tutorial! Das war offensichtlich nicht so einleuchted.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O No X11 DISPLAY Variable was set AWT, Swing, JavaFX & SWT 6
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
S Swing jx cannot be resolved to a variable (2.) AWT, Swing, JavaFX & SWT 1
S Swing jx cannot be resolved to a variable AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
B SWT Globale Variable AWT, Swing, JavaFX & SWT 10
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
D JavaFX Gesetzte Variable in einem Controller im Controller laden AWT, Swing, JavaFX & SWT 1
Z Wird die Variable nicht übergeben ? AWT, Swing, JavaFX & SWT 16
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
L ActionPerformed Variable übergeben AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
J JavaFX Variable an neue Scene übergeben AWT, Swing, JavaFX & SWT 8
V Warum wird meine Variable nicht erkannt? AWT, Swing, JavaFX & SWT 2
M Swing Alter Wert von einer Variable wird verwendet AWT, Swing, JavaFX & SWT 8
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
B Variable ist leer / Scope von Variablen AWT, Swing, JavaFX & SWT 2
J Button En-/Disablen - Warum variable final? AWT, Swing, JavaFX & SWT 2
M private Variable übergeben AWT, Swing, JavaFX & SWT 12
U AWT local variable * is accessed from within inner class; needs to be declared final AWT, Swing, JavaFX & SWT 6
R Swing Variable Panelbreite ohne Layoutmanager AWT, Swing, JavaFX & SWT 6
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
H Swing variable in Numberfield ausgeben AWT, Swing, JavaFX & SWT 5
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
B Anprechen von TextAreas mit Variable AWT, Swing, JavaFX & SWT 2
N Listener für Variable AWT, Swing, JavaFX & SWT 4
B Button benennen via Variable? AWT, Swing, JavaFX & SWT 6
B Variable wird nicht gefunden AWT, Swing, JavaFX & SWT 5
C Button/Textfeld mit Variable verknüpfen AWT, Swing, JavaFX & SWT 4
B Swing Variable in JTextfield geht nicht AWT, Swing, JavaFX & SWT 10
B problem mit variable (final) AWT, Swing, JavaFX & SWT 7
P Zeichen abhängig davon, ob sich eine Variable geändert hat AWT, Swing, JavaFX & SWT 2
T statische Variable zum Referenzieren einer Instanz von Frame AWT, Swing, JavaFX & SWT 3
J Integer aus Textdatei auslesen und in Variable speichern AWT, Swing, JavaFX & SWT 11
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
J -variable Formular Klasse AWT, Swing, JavaFX & SWT 2
E Variable übergeben AWT, Swing, JavaFX & SWT 4
B Cannot refer to a non-final variable (JButton) AWT, Swing, JavaFX & SWT 3
kb frame als globale variable AWT, Swing, JavaFX & SWT 2
G JTable - Zeilenhöhe variable? AWT, Swing, JavaFX & SWT 2
D Auf Variable zugreifen AWT, Swing, JavaFX & SWT 3
G variable übergeben in andere klasse AWT, Swing, JavaFX & SWT 4
S Bild in einer Variable speichern AWT, Swing, JavaFX & SWT 7
S Eingabe des Textfeldes in Variable speichern AWT, Swing, JavaFX & SWT 7
R JFrame -- Variable Positionierung durch Window Manager? AWT, Swing, JavaFX & SWT 2
M variable Jtable AWT, Swing, JavaFX & SWT 4
P GetSelectetItem() erkennt Variable aus Liste nicht. AWT, Swing, JavaFX & SWT 2
K Polygon in image variable? AWT, Swing, JavaFX & SWT 2
T Variable Zeilenhöhe in jTable AWT, Swing, JavaFX & SWT 5
P JTable variable Zeilengröße AWT, Swing, JavaFX & SWT 3
O Display Env. Variable unter (X11) von ClientApp. abfragen AWT, Swing, JavaFX & SWT 2
M Elemente statisch anordnen AWT, Swing, JavaFX & SWT 4
_user_q ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
J JavaFX JavaFX Elemente an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 5
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
sandaime Swing 3 JComboBoxen ausgelesen Elemente einzel ausgeben AWT, Swing, JavaFX & SWT 6
M JavaFX GUI-Elemente erstellen, nachdem die GUI geladen hat AWT, Swing, JavaFX & SWT 4
TheJavaKid JavaFX Elemente positionieren AWT, Swing, JavaFX & SWT 2
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
D JavaFX Elemente aus VBox unterscheiden AWT, Swing, JavaFX & SWT 1
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
wolfgang63 JavaFX Elemente einer Group entfernen AWT, Swing, JavaFX & SWT 1
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
O Ähnliche GUI Elemente - vererbung?! AWT, Swing, JavaFX & SWT 0
M AWT Gui anzeige Probes - Elemente erscheinen nicht regelmäßig AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
T Alle Swing-Elemente anzeigen AWT, Swing, JavaFX & SWT 9
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
K LayoutManager Wieso verschwinden Elemente? AWT, Swing, JavaFX & SWT 20
M JFrame + JNA/aero modul - GUI Elemente so möglich? AWT, Swing, JavaFX & SWT 28
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben