2010-08-23 130 views
2

我正在寻找JPanel布局(Swing)中的以下行为:基本上,它会以垂直方式安排组件,一个彼此相交。智能垂直流布局

当组件不能在容器中垂直放置时,它应该将下一个组件添加到新行中。这将继续动态地添加新的行。

它看起来像这增加3个标签后:

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

加入后:2个标签:

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

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

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

这种行为是否可以通过当前的布局来实现?

我应该自己创建一个吗?

你会如何解决这个问题?

回答

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. 
+0

好的,谢谢,但我跳过布局会自动管理列,所以当它不适合一列时,它会将组件添加到下一列。 – Hectoret 2010-08-23 09:37:57

+0

此外,我检查了您的代码,并且LC没有包含需要参数的方法: http://www.migcalendar.com/miglayout/javadoc/net/miginfocom/layout/LC.html#wrap() – Hectoret 2010-08-23 09:42:11

+0

这里就是这种情况。第四个标签“第一行第二列”将被添加到第二列中,而前三个将在第一列中。 – 2010-08-23 09:42:42

0

好,溶液中发现。感谢鲍里斯,使用MigLayout:现在

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

,它会如果没有必要指定每列的项目数量是完美的。我的意思是,布局会尝试尽可能在同一行垂直填充容器。