Как итеративно добавлять Компоненты в Параллельную Группу Swing GroupLayout?

Есть ли способ перебрать список компонентов и добавить их в ParallelGroup в Swing GroupLayout?

Это кажется трудным, потому что нет никакого способа получить ParallelGroup.

Вот код, генерирующий список компонентов (в данном случае, JCheckBoxes).

<code>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));
    }
</code>

Список работает, но как я могу выполнить итерацию по списку, чтобы вставить каждый JCheckbox в ParallelGroup GroupLayout? Например, приведенный ниже код не будет компилироваться.

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

Кроме того, кто-нибудь знает способ получить ParallelGroup, чтобы я мог итеративно добавлять Компоненты в эту группу в автономном цикле for?

 trashgod10 апр. 2012 г., 21:36
Вот пример (менее гибкий)here.
 Adam10 апр. 2012 г., 21:21
+1 за использование GroupLayout, лучшего, но наиболее недоиспользуемого менеджера компоновки ИМХО.
 Arvanem10 апр. 2012 г., 21:23
Спасибо. Мне тоже нравится GroupLayout, это так эффективно!
 Arvanem10 апр. 2012 г., 21:46
Спасибо, trashgod.

Ответы на вопрос(1)

Решение Вопроса

Я вижу, что вы пытаетесь сделать, и ваше замешательство. Вы можете использовать только анонимный синтаксис класса с оператором new. т.е.

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

Однако экземпляры ParallelGroup могут быть созданы только с помощью фабричного метода createParallelGroup (...).

Вам придется использовать временную ссылку на параллельную группу:

ParallelGroup pGroup = gl
        .createParallelGroup(GroupLayout.Alignment.CENTER);
hGroup.addGroup(pGroup);
for (JCheckBox c : listCustomiseJCB) {
    pGroup.addComponent(c);
}
 Arvanem10 апр. 2012 г., 21:19
Спасибо за понимание. +1 за эффективное решение и ваши рассуждения.

Ваш ответ на вопрос