2010-08-03 91 views
6

我創建了一個JFrame,其初始化爲BorderLayoutJScrollPane作爲其CENTER元素。Java的FlowLayout沒有正確調整大小

滾動窗格設置爲VERTICAL_SCROLLBAR_ALWAYSHORIZONTAL_SCROLLBAR_NEVER策略。我的frame的目的是爲了控制寬度,而高度應該隨着數據的添加/刪除而增大/縮小。

裏面我scroll pane,我添加了一個簡單的JPanel(可以稱之爲內容面板),它與FlowLayout(和LEADING政策)初始化。

爲了測試這一點,我只需將我的content panel填充爲20 JLabel("Item " + n)組件,其中n是循環計數器。

如果frame足夠大,並且我收縮寬度時將標籤換行到其他行,我期望看到我的labels顯示在單行上。但是,相反,只有一行顯示沒有包裝......曾經。

有沒有人知道爲什麼flow layout不涉及scroll pane涉及?

如果我刪除scroll pane一起,直接就把content panelframe,發生所期望的效果的包裝,但如果frame高度收縮比content panel高度,它只是消失較小。

想法是我希望我的labels在必要時被包裝,但如果意味着必須向上/向下滾動,則始終可見。

有關如何解決此問題的任何建議?

謝謝。

回答

9

Wrap Layout給出瞭解釋和解決方案。

+0

它似乎到目前爲止根據需要/預期工作!讓我們希望Oracle比Sun更願意投資Swing!多謝camickr! – Jeach 2010-08-03 06:04:17

+0

你會說FlowLayout有缺陷嗎?或者你認爲這是Sun的意圖嗎? WrapLayout使得它更應該成爲Swing的一部分! – Jeach 2010-08-03 06:13:21

+0

它不是一個錯誤,因爲沒有試圖動態重新計算首選大小的代碼。它只是有人設計它的工作方式。 – camickr 2010-08-03 14:38:01

0

如果您使用desingner,則必須將preferredredSize屬性設置爲null(刪除設置的內容),然後通過單擊preferredredsize屬性名稱旁邊的三點[...]按鈕設置首選大小,然後放置您的首選價值。

我遇到了同樣的問題,它適用於我