我想在一个面板中有一个 JTable 组件,以占用窗口允许的尽可能多的空间。然而,在下面,我想添加另一个固定大小的面板,里面有几个按钮。使用哪种布局来允许底部面板具有固定大小,同时允许 JTable 面板根据窗口大小进行拉伸?
2 回答
实现它的最简单方法是使用BorderLayout
. 把你的桌子放在中间。然后创建另一个面板FlowLayout
并将其放在主面板的南面。
很难准确地想象你想要什么,但这里有一段 Oracle 的摘录可能会对你有所帮助:
场景:您需要在尽可能多的空间中显示组件。
如果它是其容器中的唯一组件,请使用 GridLayout 或 BorderLayout。否则,BorderLayout 或 GridBagLayout 可能是一个很好的匹配。
如果您使用 BorderLayout,则需要将需要空间的组件放在中心。使用 GridBagLayout,您需要为组件设置约束,以便 fill=GridBagConstraints.BOTH。另一种可能性是使用 BoxLayout,使需要空间的组件指定非常大的首选和最大尺寸。
场景:您需要以自然大小在紧凑的行中显示一些组件。
考虑使用 JPanel 对组件进行分组,并使用 JPanel 的默认 FlowLayout 管理器或 BoxLayout 管理器。SpringLayout 对此也有好处。
场景:您需要在行和列中显示几个相同大小的组件。
GridLayout 非常适合这个。
场景:您需要在一行或一列中显示一些组件,它们之间可能有不同的空间量、自定义对齐方式或自定义组件大小。
BoxLayout 非常适合这个。
场景:您需要显示对齐的列,例如在类似表单的界面中,其中一列标签用于描述相邻列中的文本字段。
SpringLayout 是一个自然的选择。几个教程示例使用的 SpringUtilities 类定义了一个 makeCompactGrid 方法,该方法使您可以轻松地对齐组件的多行和多列。
场景:您有一个包含许多组件的复杂布局。
考虑使用非常灵活的布局管理器,例如 GridBagLayout 或 SpringLayout,或者将组件分组到一个或多个 JPanel 中以简化布局。如果您采用后一种方法,每个 JPanel 可能会使用不同的布局管理器。
资料来源: Oracle:使用布局管理器