【问题标题】:GridBagLayout with buttons带有按钮的 GridBagLayout
【发布时间】:2017-12-23 15:03:10
【问题描述】:

我正在尝试绘制一个带有按钮的面板,看起来像这样:

我这样创建“buttonPanel”:

buttonPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 0;
gbc.weighty = 0;

gbc.gridx = 0; gbc.gridy = 0;
gbc.gridwidth = 1; gbc.gridheight = 2;
buttonPanel.add(new JButton("A0"), gbc);

gbc.gridx = 1; gbc.gridy = 0;
gbc.gridwidth = 1; gbc.gridheight = 2;
buttonPanel.add(new JButton("A1"), gbc);

gbc.gridx = 2; gbc.gridy = 0;
gbc.gridwidth = 2; gbc.gridheight = 2;
buttonPanel.add(new JButton("A2"), gbc);

gbc.gridx = 0; gbc.gridy = 2;
gbc.gridwidth = 3; gbc.gridheight = 2;
buttonPanel.add(new JButton("A3"), gbc);

gbc.gridx = 3; gbc.gridy = 2;
gbc.gridwidth = 1; gbc.gridheight = 2;
buttonPanel.add(new JButton("A4"), gbc);

但是结果是这样的:

由于按钮“A3”的gridwidth=3,它应该到达按钮“A2”的中间?

有什么帮助吗?

编辑1: 增加面板大小或在按钮上设置更长的文本不会改变任何内容:

编辑2: 为按钮“A2”和“A3”设置 weightx=1 有助于:

这对我来说是可以接受的,尽管如果按钮“A4”与按钮“A0”和“A1”具有相同的宽度会很好

【问题讨论】:

  • 如果增加外部面板的宽度(以 gridbag 作为布局的 jpanel)会发生什么?你们中的一些人使用 Ax 以外的其他文本 - 这需要更多空间,尤其是 A2?
  • 没什么..结果保持不变
  • 将 A3 和 A2 的权重设置为 1.0。
  • 我将此作为真实答案,因此您可以接受。将 A4 设置为与 A0 和 A1 相同的尺寸并不容易,也许设置 A4 的最大尺寸可能会有所帮助。

标签: java swing layout-manager gridbaglayout


【解决方案1】:

将 A2 和 A3 的 weightx 设置为 1.0。

【讨论】:

    【解决方案2】:

    虽然如果按钮“A4”与按钮“A0”和“A1”具有相同的宽度会很好

    你不能让一个单元格占用另一个单元格的部分空间。

    因此您需要通过创建 4 个(不可见的)虚拟组件来“伪造”它。这允许您定义一个 4 列的网格。

    那么 A2 的网格宽度为“2”,A3 的网格宽度为“3”。其他的网格宽度为 1。所以现在每一行的单元格宽度为 4 以匹配虚拟单元格。

    查看:Why does this GridBagLayout not appear as planned?,了解此方法的示例。

    或者更简单的选择是使用Relative Layout。它允许您给组件一个相对大小。所以你需要两个面板。第一个组件的相对大小为 1, 1, 2,第二个组件的相对大小为 3, 1。

    【讨论】:

    • 如果可以替代 GridBag 布局,MigLayout 是一个非常好的解决方案:miglayout.com
    • @brummfondel,这与我的回答无关。将其发布在您的答案中或作为对问题的评论。
    • 您提到了相对布局作为选项,我提到了 MigLayout 作为对您评论的评论。
    • @brummfondel,请删除您的 cmets。这与我的回答无关。我没有要求如何解决问题的建议。 OP征求建议。因此,如果您认为这是一个很好的建议,请在您的回答中提出建议,而不是我的建议,因为我不喜欢 MigLayout,因此不会推荐它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多