2012-04-10 10 views
5

¿Hay alguna forma de iterar sobre una Lista de componentes y agregarlos a un ParallelGroup en Swing GroupLayout?Cómo agregar componentes de forma iterativa a un grupo paralelo Swing GroupLayout?

Parece difícil porque no hay un método para obtener el ParallelGroup.

Aquí está el código que genera una Lista de componentes (en este 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)); 
    } 

La lista está funcionando, pero ¿cómo puedo iterar sobre la lista para insertar cada JCheckBox en ParallelGroup de un GroupLayout? Por ejemplo, el siguiente código no se compilará.

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

Por otra parte, ¿alguien sabe de una manera de hacerse con un ParallelGroup para que pudiera iterativa agregar componentes a ese grupo en un bucle independiente para?

+3

+1 para el uso de GroupLayout, el mejor, pero la mayor parte infrautilizada en mi humilde opinión controlador de distribución. – Adam

+0

Gracias. También me gusta GroupLayout, ¡es tan efectivo! – Arvanem

+1

Hay un ejemplo (menos flexible) [aquí] (http://stackoverflow.com/a/8504753/230513). – trashgod

Respuesta

6

Veo lo que intenta hacer y su confusión. Solo puede usar la sintaxis de clase anónima con el nuevo operador. es decir

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

Sin embargo ParallelGroup casos sólo se pueden crear con el createParallelGroup método de fábrica (...).

Vas a tener que utilizar una referencia temporal para el grupo paralelo:

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

Gracias por su comprensión. +1 para la solución efectiva y su razonamiento. – Arvanem

Cuestiones relacionadas