2010-08-23 135 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)); 

,它會如果沒有必要指定每列的項目數量是完美的。我的意思是,佈局會嘗試儘可能在同一行垂直填充容器。