2012-04-10 13 views
5

Gibt es eine Möglichkeit, über eine Liste von Komponenten zu iterieren und sie zu einer ParallelGroup in Swing GroupLayout hinzuzufügen?Wie fügt man iterativ Komponenten zu einer Swing GroupLayout ParallelGroup hinzu?

Es scheint schwierig, weil es keine Methode gibt, die ParallelGroup zu erhalten.

Hier ist der Code zum Generieren einer Liste von Komponenten (in diesem Fall JCheckBoxes).

List<JCheckBox> listCustomiseJCB = new ArrayList<>(); 
    for (int w = 0; w < initialCMTableColumns.size(); w++) { 
     String heading = (String)initialCMTableColumns.get(w).getHeaderValue(); 
     listCustomiseJCB.add(new JCheckBox(heading)); 
    } 

Die Liste funktioniert, aber wie kann ich über die Liste iterieren jede JCheckBox in ein Grouplayout der Parallelgruppe einfügen? Zum Beispiel wird der folgende Code nicht kompiliert.

GroupLayout gl = new GroupLayout(jpnlCustomise); 
    jpnlCustomise.setLayout(gl); 
    gl.setAutoCreateContainerGaps(true); 
    gl.setAutoCreateGaps(true); 

    GroupLayout.SequentialGroup hGroup = gl.createSequentialGroup(); 

    hGroup 
      .addComponent(jbtnApply); 
    hGroup.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER) 
      // ERRORS BEGIN HERE 
      { for (JCheckBox c: listCustomiseJCB) { 
      .addComponent(c); 
      }}); 
      // ERRORS END HERE 
    hGroup 
      .addComponent(jbtnCancel); 

    gl.setHorizontalGroup(hGroup); 

Alternativ kennt jemand eine Möglichkeit, hält eine Parallelgruppe zu bekommen, so dass ich iterativ Komponenten diese Gruppe in einem Standalone-for-Schleife hinzufügen könnte?

+3

+1 für den Einsatz von Grouplayout, der besten, aber am wenigsten genutzte Layout-Manager IMHO. – Adam

+0

Danke. Ich mag GroupLayout auch, es ist so effektiv! – Arvanem

+1

Es gibt ein (weniger flexibles) Beispiel [hier] (http://stackoverflow.com/a/8504753/230513). – trashgod

Antwort

6

Ich kann sehen, was Sie versuchen, und Ihre Verwirrung. Sie können die anonyme Klassensyntax nur mit dem neuen Operator verwenden. d.h

new LinkedList<String>() { 
    { 
    add("bar"); 
    } 
}; 

jedoch Parallelgruppen Instanzen können nur mit der Factory-Methode createParallelGroup erstellt werden (...).

Sie erhalten einen temporären Bezug auf die parallele Gruppe verwenden müssen:

ParallelGroup pGroup = gl 
     .createParallelGroup(GroupLayout.Alignment.CENTER); 
hGroup.addGroup(pGroup); 
for (JCheckBox c : listCustomiseJCB) { 
    pGroup.addComponent(c); 
} 
+1

Danke für Ihr Verständnis. +1 für die effektive Lösung und Ihre Argumentation. – Arvanem