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

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

Кажется сложным, потому что нет способа получить ParallelGroup.

Вот код, генерирующий список компонентов (в данном случае 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));
    }

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

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

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

Ответ 1

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

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

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

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

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