LayoutManager Beliebige Anzahl von Panels für LayoutManager

Gerald

Mitglied
Guten Tag Experten und Neugierige,

folgendes Ansinnen habe ich: Mittels Layoutmanager (GroupLayout) sollen Panels (JPanel)
in Zeilen und Spalten mit beliebiger Anzahl angelegt werden.

Java:
//...
row = new SequentialGroup[rows];
row[0] = layout.createSequentialGroup();

row[0].addGroup(layout.createParallelGroup()
                        .addComponent(pan.get(0).getPanel()
                        .addComponent(pan.get(1).getPanel() ));
//u.s.w.

Prinzipiell funktioniert es, aber nur mit festgelegter Anzahl von Zeilen und Spalten.

Folgendes schien ein Ansatz zu sein, aber es gibt unerwünschte Effekte: Die Panels haben
nichtgewollte Abstände. Dies liegt, so glaube ich, an dem wiederholten "addGroup".

Java:
ParallelGroup pr1 = layout.createParallelGroup();
ParallelGroup pr2 = layout.createParallelGroup();

row[0].addGroup(pr1.addComponent(pan.get(0).getPanel()));
row[0].addGroup(pr1.addComponent(pan.get(1).getPanel()));

row[0].addGroup(pr2.addComponent(pan.get(2).getPanel()));
row[0].addGroup(pr2.addComponent(pan.get(3).getPanel()));
//u.s.w.

ParallelGroup pc = layout.createParallelGroup();
SequentialGroup sc1 = layout.createSequentialGroup();
SequentialGroup sc2 = layout.createSequentialGroup();

col[0].addGroup(pc.addGroup(sc1.addComponent(pan.get(0).getPanel())));
col[0].addGroup(pc.addGroup(sc1.addComponent(pan.get(1).getPanel())));

col[0].addGroup(pc.addGroup(sc2.addComponent(pan.get(2).getPanel())));
col[0].addGroup(pc.addGroup(sc2.addComponent(pan.get(3).getPanel())));
//u.s.w.

Um beliebige Spalten- und Zeilenanzahl einstellen zu können, will ich Schleifen benutzen.
In etwa wie folgt:

Java:
int pc[] = new int[10];
int sc[] = new int[10];

for (int h = 0; h < lenH; h++)
    for (int i = 0; i < lenI; i++)
        for (int j = 0; j < lenJ; j++)
            col[0].addGroup(pc[h].addGroup(sc[i].addComponent(pan.get(j).getPanel())));

In der angedachten Schleife wird "addGroup" jedes Mal wiederholt.
Mir ist es noch nicht gelungen eine Konstruktion zu finden, die zu oft wiederholtes "addGroup"
vermeidet.

Ist mein Verdacht richtig, daß es an "addGroup" liegt?
Hat Jemand eine Idee, wie ich das Problem (beliebige Anzahl) lösen kann?

(Ich habe den Kode knapp gehalten, weil ich denke, daß es für das Verständnis meines Problems
schon reichen könnte.)

Gespannt auf eine Antwort hofft
Gerald
 

mihe7

Top Contributor
Das hatten wir doch schon einmal... (https://www.java-forum.org/thema/variable-elemente-fuer-grouplayout.182075/#post-1159248)

Hier mal ein Beispiel:

Java:
import javax.swing.*;
import javax.swing.GroupLayout.*;
import java.util.ArrayList;
import java.util.List;

public class Test {
    private List<JComponent> components = new ArrayList<>();

    public Test() {
        for (int i = 0; i < 100; i++) {
            components.add(new JLabel("Label " + (i+1)));
        }
    }

    private JPanel createContentPane(int cols, int rows) {
        JPanel panel = new JPanel();
        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        SequentialGroup horizontal = layout.createSequentialGroup();
        for (int x = 0; x < cols; x++) {
            ParallelGroup par = layout.createParallelGroup();
            for (int y = 0; y < rows; y++) {
                par.addComponent(components.get(y*cols + x));
            }
            horizontal.addGroup(par);
        }

        SequentialGroup vertical = layout.createSequentialGroup();
        for (int y = 0; y < rows; y++) {
            ParallelGroup par = layout.createParallelGroup();
            for (int x = 0; x < cols; x++) {
                par.addComponent(components.get(y*cols + x));
            }
            vertical.addGroup(par);
        }

        layout.setHorizontalGroup(horizontal);
        layout.setVerticalGroup(vertical);

        return panel;
    }

    public void run() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(createContentPane(10, 10));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}

Natürlich würde es auch reichen, nur rows oder nur cols zu übergeben und den jeweils anderen Teil aus der Anzahl der Elemente zu berechnen. Außerdem geht der Code davon aus, dass das komplette Rechteck ausgefüllt werden kann.
 

Gerald

Mitglied
Hallo Mihe7,
danke für Deine Antwort. Du hast recht, das hatten wir schon mal so ähnlich. Aber ich will eigentlich was anderes.
Es geht darum in einer Struktur aus Zeilen und Spalten wiederum wahlweise eine "Substruktur" anzulegen.
Mit Deinem Kode:
Java:
par.addComponent(components.get(y*cols + x));
löse ich meine Aufgabe nicht.
Du hast Dir wieder Mühe gemacht, aber wir haben uns wohl nicht richtig verstanden.
Ich glaube, daß die Sache mit "addGroup" gelöst werden muß. Es scheint, daß es etwas wie "getGroup" geben müßte, aber ich habe nichts gefunden.
Wegen der Sache mit "Substrukturen" soll es auch möglich sein "unregelmäßige" Strukur zu erzeugen; also in den Spalten sind nicht überall gleich viele Zeilen. "addComponent" ist nicht geeignet eine "Substruktur" einzubauen. Oder siehst Du das anders?
Das zu lösende Problem besteht meiner Meinung nach hier:
Java:
col[0].addGroup(pc.addGroup(sc1.addComponent(pan.get(0).getPanel())));
"addComponent" erlaubt nur das Einfügen einer Komponente, nicht einer Gruppe. Oder?
 

Gerald

Mitglied
Hallo!
Hab es selber herausbekommen.
Java:
ParallelGroup p1 = layout.createParallelGroup();
ParallelGroup p2 = layout.createParallelGroup();

p1.addComponent(pan.get(0).getPanel());
p1.addComponent(pan.get(1).getPanel());
p1.addComponent(pan.get(2).getPanel());
row.addGroup(p1);

p2.addComponent(pan.get(3).getPanel());
p2.addComponent(pan.get(4).getPanel());
p2.addComponent(pan.get(5).getPanel());
row.addGroup(p2);
//u.s.w.

Sequential s1 = layoutSequentialGroup();
Sequential s2 = layoutSequentialGroup();

s1.addComponent(pan.get(0).getPanel())
s1.addComponent(pan.get(1).getPanel())
//u.s.w.

ParallelGroup p = layout.createParallelGroup();
p.addGroup(s1);
//u.s.w.

col.addGroup(p);
//u.s.w.
Schönen Tag noch ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
B An beliebige Stelle des Bildschirms zeichnen AWT, Swing, JavaFX & SWT 28
J Fixes Layout auf beliebige Fenstergröße skalieren AWT, Swing, JavaFX & SWT 2
V Beliebige Komponenten in einem JPopupMenu? AWT, Swing, JavaFX & SWT 3
G Beliebige Klasse als Ereignisquelle AWT, Swing, JavaFX & SWT 4
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
D Swing JSlider Tip Anzahl AWT, Swing, JavaFX & SWT 3
Hijo2006 Anzahl der Excelzeilen AWT, Swing, JavaFX & SWT 1
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
M Anzahl Frames in Taskleiste AWT, Swing, JavaFX & SWT 2
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
DEvent Swing JTextField Anzahl an sichtbaren Zeichen AWT, Swing, JavaFX & SWT 4
Y JTable mit großer Anzahl von Datensätzen AWT, Swing, JavaFX & SWT 3
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
T Anzahl Event Listeners AWT, Swing, JavaFX & SWT 4
O Anzahl der Zeilen im TableViewer AWT, Swing, JavaFX & SWT 12
G JList mit einer großen Anzahl an Einträgen AWT, Swing, JavaFX & SWT 15
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
T entsprechende Anzahl an jCheckboxen in einer jTable AWT, Swing, JavaFX & SWT 5
M Problem mit Festsetzen der Anzahl ein reihen in einer JTable AWT, Swing, JavaFX & SWT 11
M Komponenten einer unbestimmten Anzahl und MouseListener AWT, Swing, JavaFX & SWT 4
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
S JList gibt nach Sortierung mit Collections keine Anzahl mehr AWT, Swing, JavaFX & SWT 3
B random anzahl an jTextFieldern einfügen AWT, Swing, JavaFX & SWT 2
J Große Anzahl von Comboboxen in Tabelle darstellen AWT, Swing, JavaFX & SWT 2
G Tabelle mit variabler Anzahl an Zeilen AWT, Swing, JavaFX & SWT 3
M JList mit unbestimmter Anzahl Panels füllen AWT, Swing, JavaFX & SWT 4
X JTable --> Anzahl der Spalten ändern AWT, Swing, JavaFX & SWT 8
S Anzahl ActionEvents (Strings in eine ArrayList einfügen) AWT, Swing, JavaFX & SWT 4
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
I GUI, das verschiedene Panels hat (Von Seite zu Seite navigieren) AWT, Swing, JavaFX & SWT 7
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
T Swing Bug: mehrfache Panels bei Mouseover? AWT, Swing, JavaFX & SWT 11
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
R Swing panels nebeneinander mit BoxLayout.X_AXIS AWT, Swing, JavaFX & SWT 4
P Swing Panels Wechseln AWT, Swing, JavaFX & SWT 9
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
V AWT Panels überlappen AWT, Swing, JavaFX & SWT 1
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
U Swing Panels im Contentpane durchschalten AWT, Swing, JavaFX & SWT 1
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
S Swing Plätze von 2 panels vertauschen AWT, Swing, JavaFX & SWT 4
T Panels mit Button verbinden AWT, Swing, JavaFX & SWT 3
F Swing Wie verwalte ich meine Panels richtig? AWT, Swing, JavaFX & SWT 2
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
D Stapelung von Panels AWT, Swing, JavaFX & SWT 6
V Swing MouseEvents bei gestapelten Panels AWT, Swing, JavaFX & SWT 2
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
kodela Teil eines Panels als Graphik speichern AWT, Swing, JavaFX & SWT 3
Kenan89 LayoutManager MigLayout Positionierung von Panels AWT, Swing, JavaFX & SWT 4
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
J Problem mit der Höhe eines Panels AWT, Swing, JavaFX & SWT 11
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
S Swing (Nicht) Vergrößern von Panels AWT, Swing, JavaFX & SWT 3
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
B LayoutManager Zeilenweise Anordnung von Panels AWT, Swing, JavaFX & SWT 19
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
J LayoutManager Panels übereinander AWT, Swing, JavaFX & SWT 3
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
C Aufklappbare Panels AWT, Swing, JavaFX & SWT 2
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
D Vererbung von Panels AWT, Swing, JavaFX & SWT 8
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
B Panels stapeln, geht das? AWT, Swing, JavaFX & SWT 7
I 2 Panels übereinander, 1 transparent AWT, Swing, JavaFX & SWT 2
S GridBagLayout Panels AWT, Swing, JavaFX & SWT 2
W Panels vertikal anordnen AWT, Swing, JavaFX & SWT 10
R Swing Kommunikation zwischen Panels AWT, Swing, JavaFX & SWT 2
F Abschaltbare Panels AWT, Swing, JavaFX & SWT 5
aze Layout auf Teil eines Panels anwenden AWT, Swing, JavaFX & SWT 5
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
I Swing Positionieren von Panels mit layoutManager AWT, Swing, JavaFX & SWT 6
B Java Grafiken an bestimmter Positon des Panels anzeigen AWT, Swing, JavaFX & SWT 6
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
H2SO3- AWT seltsammes verhalten eines Panels AWT, Swing, JavaFX & SWT 9
S Buttons, Panels etc. zu einer Teilkomponente hinzufügen AWT, Swing, JavaFX & SWT 5
S mehere panels übereinander AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben