智能垂直流动布局

时间:2010-08-23 09:11:04

标签: java user-interface swing layout

我在JPanel布局(Swing)中寻找以下行为:基本上它会以垂直方式排列组件,一个相互吼叫。

当组件无法垂直放入容器时,它应该在新行中添加下一个组件。这将继续动态,根据需要添加新行。

在添加3个标签之后看起来会像这样:

+--------------------------+
|  label1                  |
|  label2                  |
|  label3                  |
+--------------------------+

添加:另外2个标签:

+--------------------------+
|  label1  label4          |
|  label2  label5          |
|  label3                  |
+--------------------------+

最后,在添加2个标签后,它将如下所示:

+--------------------------+
|  label1  label4  label7  |
|  label2  label5          |
|  label3  label6          |
+--------------------------+

使用当前布局之一可以实现此行为吗?

我应该自己创建吗?

您如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

是的,有可能。尝试使用MigLayout

以下是一段代码摘要,说明了用法:

JPanel panel = new JPanel(new MigLayout("fill, flowY, wrap 4));
panel.add(new JLabel("row 1, column 1"));
panel.add(new JLabel("row 2, column 1"));
panel.add(new JLabel("row 3, column 1"));
panel.add(new JLabel("row 1, column 2")); // etc.

答案 1 :(得分:0)

好的,找到了解决方案。感谢Boris,使用MigLayout

LC lc_Y = (new LC()).fill().flowY();
lc_Y.setWrapAfter(ITEMS_PER_COLUMN);
JPanel panel = new JPanel(new MigLayout(lc_Y));

现在,如果不需要指定每列的项目数量,那将是完美的。我的意思是,布局会尝试在容器中垂直填充尽可能多的项目。