2012-04-10 16 views
5

C'è un modo per scorrere su un elenco di componenti e aggiungerli a un gruppo parallelo in Swing GroupLayout?Come aggiungere iterativamente i componenti a un gruppo SwingLayout ParallelGroup?

Sembra difficile perché non esiste un metodo per entrare in possesso di ParallelGroup.

Ecco il codice che genera un elenco di componenti (in questo caso, 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)); 
    } 

L'elenco è in funzione, ma come posso iterare l'elenco per inserire ogni JCheckBox in ParallelGroup di un GroupLayout? Ad esempio, il codice seguente non verrà compilato.

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); 

In alternativa, qualcuno sa di un modo per entrare in possesso di un ParallelGroup in modo che potessi iterativamente aggiungere componenti a quel gruppo in uno standalone per il ciclo?

+3

+1 per l'utilizzo GroupLayout, il migliore, ma la maggior parte sottoutilizzata Layout Manager IMHO. – Adam

+0

Grazie. Mi piace anche GroupLayout, è così efficace! – Arvanem

+1

C'è un esempio (meno flessibile) [qui] (http://stackoverflow.com/a/8504753/230513). – trashgod

risposta

6

Posso vedere cosa stai cercando di fare e la tua confusione. È possibile utilizzare solo la sintassi di classe anonima con il nuovo operatore. cioè

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

Tuttavia ParallelGroup istanze possono essere create solo con il metodo factory createParallelGroup (...).

Dovrete utilizzare un riferimento temporaneo per gruppo parallelo:

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

Grazie per la vostra comprensione. +1 per la soluzione efficace e il tuo ragionamento. – Arvanem

Problemi correlati