我试图实现一种设计,即我的一个JPanel高度仅设置为其内部组件的高度。目前它的布局如下:
JPanel (BoxLayout)
JPanel (CardLayout)
JPanel (BoxLayout)
JPanel (BoxLayout)
JPanel (FlowLayout)
它当前显示为如此,我希望顶部位在x轴和y轴上展开两者,按下"你的名字"到状态栏上方。
我需要使用BoxLayouts,它似乎从上到下流动。
请帮忙!
答案 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;
}
现在流盘的高度将被尊重,所有额外的空间将转移到另一个面板。