智能垂直流量布局

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

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

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

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

添加:2个以上的标签:

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

最后,添加2个标签后,它看起来像这样:

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

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

我应该自己创建吗?

你会如何解决这个问题?

对的,这是可能的。 尝试使用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. 

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

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

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