【问题标题】:How to iteratively add Components to a Swing GroupLayout ParallelGroup?如何迭代地将组件添加到 Swing GroupLayout ParallelGroup?
【发布时间】:2012-04-23 02:26:55
【问题描述】:

有没有办法遍历组件列表并将它们添加到 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));
    }

列表正在工作,但我如何遍历列表以将每个 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 的方法,以便我可以在独立的 for 循环中迭代地将组件添加到该组?

【问题讨论】:

  • +1 用于使用 GroupLayout,恕我直言,最好但使用率最低的布局管理器。
  • 谢谢。我也喜欢GroupLayout,太有效了!
  • 有一个(不太灵活的)例子here

标签: java swing grouplayout


【解决方案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);
}

【讨论】:

  • 感谢您的理解。为有效的解决方案和您的推理 +1。
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多