2014-03-12 91 views
2

我有一個JPanel裏面的JScrollPane它嵌套在一些其他容器內。我的JPanel使用來自SO用戶jxdthis question的修改FlowLayout。JScrollPane中的JPanel擴展包

這可以是信息矯枉過正,但所討論的面板的全部嵌套如下:

的JPanel(ModifiedFlowLayout)> JScrollPane的>的JPanel(GridBagLayout的)> JTabbedPane中>的JPanel(GridBagLayout的)>調整JSplitPane>的JPanel(BorderLayout的)> JFrame。

問題是,當我在我的JFrame上調用pack()時,JScrollPane/JPanel水平擴展以填充整個剩餘的屏幕空間(跨多個顯示器)。所使用的空間遠遠超過顯示JPanel中所有組件所需的空間。我嘗試在我的JPanel上使用setMaximumSize(),但在這種情況下它似乎被忽略。

理想情況下,我希望面板在調整圍繞它的組件的大小後留下空間。可以/如何做到這一點?

+0

你試過重寫getPreferredSize()嗎? – nachokk

+0

@nachokk嗯,我會被詛咒。我認爲最大尺寸將是比首選尺寸更重要的因素,但設置似乎阻止了擴展,儘管它已導致ModifiedFlowLayout開始表現不當,但這可能是一個不同的問題。我也沒有覆蓋它,因爲我只使用JPanel而不是擴展它。我使用'setPreferedSize()'來代替。 – Fr33dan

+0

[我應該避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法嗎?](http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-方法在java的swi) – nachokk

回答

0

FlowLayout的首選大小將嘗試顯示單個行上的所有組件。我不知道ModifiedFlowLayout是如何工作的,但您可以查看Wrap Layout,它可以做同樣的事情。

但是,當使用時,您可以使用setSize(...)方法來建議初始寬度應該是多少。組件的初始包裝應該基於這個尺寸。

+0

我試過了,它似乎WrapLayout和ModifiedFlowLayout具有相同的行爲。 @ nachokk對使用首選大小而不是最大大小的評論證明是解決問題的手段,但他沒有將其作爲答案發布,因此我無法對其進行標記。 – Fr33dan

+0

@ Fr33dan,你不應該使用setPreferredSize()。如果用戶調整了框架的大小,佈局將不會動態改變。 – camickr

+0

如果我在我的JPanel上使用'setPreferredSize()',如果直接對我的JScrollPane執行,那麼它就是這樣。 – Fr33dan