2010-07-19 109 views
0

我正在構建一個充滿標籤的網格。其中一個包含html文本,並應調整爲最大格式並可滾動。我發現如何添加一個JScrollPane,但它保持一行高度,即使當我給它一個400x400的大小時,我也找不到如何調整它的大小......將一個可滾動的jpanel添加到網格佈局

刪除getViewport()會得到相同的結果。

JPanel grid = new JPanel(new GridLayout(1,2)); 

// first cell of the grid 
grid.add(new JLabel("title")); 

// second cell of the grid, this should be the scrollable one 
JScrollPane scroll = new JScrollPane(); 
scroll.getViewport().setSize(400, 400); 
scroll.getViewport().add(new JLabel("<html>long<br>html<br>text</html>")); 
grid.add(scrollVersion, BorderLayout.CENTER); 

任何想法?

非常感謝......

+0

我想你試過'setMinimumSize'? – sje397 2010-07-19 10:06:23

回答

1

網格佈局不尊重它勾畫出的組件的首選大小。它旨在使所有網格單元具有相同的大小。另一種方法是使用GridBagLayout,但是我個人會推薦ZoneLayout這在我看來更簡單,功能強大,而且更直觀。隨着cheatsheet你不會出問題。

作爲一個方面說明,BorderLayout.CENTER是一個用於BorderLayout的約束,與GridLayout不兼容。當組件被添加到GridLayout的所有者時,您不需要提供約束。使用GridLayout從左上角的單元格開始左右添加組件。

0

GridBagLayout更換您的網格佈局。有了正確的約束條件,它應該像魅力一樣工作。顯然,看看some examples,因爲GridBagLayout看起來相當複雜,但在一些示例中相當簡單。

0

GridLayout的所有單元格被設計爲具有相同的大小,所以如果你想要一個大於這個東西,你必須使用另一個LayoutManager,就像Riduel所建議的GridBagLayout。

此外,如果你的JLabel將不得不多行,我建議你通過一個不可編輯的JTextPane更換IT運的JTextArea