2012-04-10 7 views
5

Czy istnieje sposób na powtórzenie listy komponentów i dodanie ich do grupy ParallelGuide w Swing GroupLayout?Jak iteracyjnie dodać komponenty do Swing GroupLayout ParallelGroup?

Wydaje się trudne, ponieważ nie ma metody, aby uzyskać dostęp do ParallelGroup.

Oto kod generujący listę komponentów (w tym przypadku 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)); 
    } 

Lista działa, ale jak mogę iteracyjne nad listą, aby wstawić każdą JCheckBox w GroupLayout za ParallelGroup? Na przykład poniższy kod nie zostanie skompilowany.

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

Ewentualnie, czy ktoś wie, jak go zdobyć w ParallelGroup abym mógł iteracyjnie dodać składniki do tej grupy w autonomicznym dla pętli?

+3

+1 za korzystanie GroupLayout, najlepszy ale najbardziej underused menedżera układ IMHO. – Adam

+0

Dziękuję. Też lubię GroupLayout, jest tak skuteczny! – Arvanem

+1

Istnieje (mniej elastyczny) przykład [tutaj] (http://stackoverflow.com/a/8504753/230513). – trashgod

Odpowiedz

6

Widzę, co próbujesz zrobić i swoje zamieszanie. Z nowym operatorem można używać tylko anonimowej składni klas. tj

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

Jednak ParallelGroup przypadki mogą być tworzone tylko z createParallelGroup Factory Method (...).

Będziesz musiał użyć tymczasowego odniesienie do grupy równolegle:

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

Dzięki za wyrozumiałość. +1 dla skutecznego rozwiązania i twojego rozumowania. – Arvanem

Powiązane problemy