【问题标题】:how GridBagLayout works?GridBagLayout 是如何工作的?
【发布时间】:2014-08-21 17:32:46
【问题描述】:

我不熟悉GridBagLayout 的主题,我无法理解约束weightfill 之间的确切区别。

我可以fill 而不分配weight

除非您为 weightx 或 weighty 指定至少一个非零值, 所有组件都聚集在其容器的中心。 这是因为当权重为 0.0(默认值)时, GridBagLayout 在其单元格网格和 容器的边缘。

我的问题是,如果这是真的,那么为什么组件之间没有空间并且它们看起来是附加的?

【问题讨论】:

标签: java swing layout layout-manager gridbaglayout


【解决方案1】:

weightx/y 指定给定单元格将具有的“权重”量。重量越大,细胞想要占据的空间就越大。可用空间量是布置完所有其他组件后剩余的剩余空间。

fill 确定组件将如何扩展以占用给定单元格可用的空间。也就是说,如果您在同一列中有两个组件,则可以使用 fill 设置为 HORIZONTALBOTH 以允许组件“扩展”以填充列的可用空间,例如例子...

这显然也适用于同一行中的组件并使用VERTICALBOTH

Short 按钮设置为fill BOTH 并将weightxweighty 设置为1 的示例。短按钮想要占据容器的所有剩余空间。

请确保您已阅读 How to Use GridBagLayout 了解更多详情

我的问题是,如果这是真的,那么为什么组件之间没有空间并且它们看起来是附加的?

GridBagLayout 默认不会在组件之间添加任何间距,但您可以通过insets 属性指定间距

【讨论】:

    【解决方案2】:

    “重量”是占组件的额外位置。
    “填充”是组件是否必须填充额外的位置(是否应该扩展组件以填充整个位置)。如果它不应该填充额外的位置,您可以使用“锚”来确定组件的位置(左边界、右边界、居中)

    【讨论】:

    • 这意味着如果您不指定权重,填充将不起作用,因为组件不会占用额外空间?
    • 没有。如果同一列中有两个组件,一个比另一个宽,fill(具体设置为HORIZONTALBOTH)将确保组件(具有fill 属性)将展开以填充单元格,覆盖它的首选宽度。使用 VERTICALBOTH fill 值时,同一行中的列也是如此
    • @MadProgrammer 谢谢。你的解释是正确的,比我的更好
    • @SergiyMedvynskyy 很高兴它有帮助 ;)
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多