如何迭代地将组件添加到Swing GroupLayout ParallelGroup?

Arv*_*nem 5 java swing grouplayout

有没有办法迭代组件列表并将它们添加到Swing GroupLayout中的ParallelGroup?

这似乎很难,因为没有方法可以获得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));
    }
Run Code Online (Sandbox Code Playgroud)

列表正在工作,但我如何迭代List以将每个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);
Run Code Online (Sandbox Code Playgroud)

或者,是否有人知道如何获取ParallelGroup以便我可以在独立的for循环中迭代地将组件添加到该组?

Ada*_*dam 6

我可以看到你想要做什么以及你的困惑.您只能对new运算符使用匿名类语法.即

new LinkedList<String>() {
  {
     add("bar");
  }
};
Run Code Online (Sandbox Code Playgroud)

但是,只能使用工厂方法createParallelGroup(...)创建ParallelGroup实例.

您必须使用对并行组的临时引用:

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