2015-10-17 62 views
1

我試圖實現一個設計,其中我的JPanel的高度之一隻設置爲它的內部組件的高度。目前,它的佈局,像這樣:只填充JPanel到內部元素的高度

JPanel (BoxLayout) 
    JPanel (CardLayout) 
     JPanel (BoxLayout) 
     JPanel (BoxLayout) 
    JPanel (FlowLayout) 

它目前顯示爲的話,我想最高位,擴大雙方在X和Y軸力推的「您的姓名」到狀態欄上方。

Example UI

我需要,使其從頂部流向底部使用它似乎BoxLayouts。

請幫忙!

+1

改爲使用'GridBagLayout',它會給你控制權來指定如何更好地分配空間 – MadProgrammer

+0

你必須[覆蓋getMin/Max/PreferredSize](http://stackoverflow.com/a/9258934/714968)對於[BoxLayout](https://docs.oracle.com/javase/tutorial/uiswing/layout/box.html),或者使用[Spin​​gLayout](https://docs.oracle.com/javase/tutorial/uiswing) /layout/spring.html),更好的是[MigLayout](http://www.miglayout.com/) – mKorbel

回答

1

我想要最高位來擴展x和y軸上的「Your Name」,將其推到狀態欄的上方。

然後聽起來像你可以使用BorderLayout作爲頂層面板而不是BoxLayout。

由於該框架的內容窗格中的默認佈局管理器是BorderLayout的你可以直接添加的面板框架的內容窗格:

frame.add(cardLayoutPanel, BorderLayout.CENTER); 
frame.add(flowLayoutPanel, BorderLayout.PAGE_END); 

當您將面板添加到「PAGE_END 「,其首選高度受到尊重。

當您將面板添加到「中心」時,它將獲得框架中可用的所有額外空間。

閱讀有關Layout Managers的Swing教程以獲取更多信息和工作示例。

我需要使用BoxLayouts它似乎是它從上到下流動。

您不需要使用BoxLayout(如上所示),但是如果您願意,仍然可以使用它。 BoxLayout尊重面板的最大尺寸。因此,您可以使用流佈局覆蓋面板的getPreferredSize()方法,以返回面板的首選高度。

@Override 
public Dimension getMaximumSize() 
{ 
    Dimension preferred = super.getPreferredSize(); 
    Dimension maximum = super.getMaximumSize(); 
    maximum.height = preferred.height; 

    return maximum; 
} 

現在流動面板的高度將得到尊重,所有額外的空間將轉到其他面板。