仅将JPanel填充到内部元素

时间:2015-10-17 09:51:33

标签: java swing layout-manager

我试图实现一种设计,即我的一个JPanel高度仅设置为其内部组件的高度。目前它的布局如下:

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

它当前显示为如此,我希望顶部位在x轴和y轴上展开两者,按下"你的名字"到状态栏上方。

Example UI

我需要使用BoxLayouts,它似乎从上到下流动。

请帮忙!

1 个答案:

答案 0 :(得分:1)

  

我希望顶部位在x轴和y轴上展开,推动"你的名字"到状态栏上方。

然后听起来你可以使用BorderLayout作为顶级面板,而不是BoxLayout。

由于框架内容窗格的默认布局管理器是BorderLayout,您只需将面板直接添加到框架的内容窗格中即可:

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

当您将面板添加到" PAGE_END"时,会尊重其首选高度。

当您将面板添加到" CENTER"它获得了框架中所有可用的额外空间。

阅读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;
}

现在流盘的高度将被尊重,所有额外的空间将转移到另一个面板。