【问题标题】:GridBagLayout - different row sizeGridBagLayout - 不同的行大小
【发布时间】:2014-04-14 19:01:03
【问题描述】:

通常情况下,我对 Swing 和不同的布局并没有那么糟糕,但是这个真的让我很烦。

以下图表使用 GridBagLayout 有什么问题?每个厚矩形都是一个 JPanel。 细线只是正确 y 值的帮助。

提前致谢!

package at;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GridMask extends JFrame {

JPanel jPanel1, jPanel2, jPanel3, jPanel4, jPanel5, jPanel6;

public GridMask() {
    unimportantStuff();

    GridBagLayout gbl = new GridBagLayout();
    setLayout(gbl);

    GridBagConstraints gbc;

    gbc = getGbc(0, 0, 3, 1, 0.5);
    gbl.setConstraints(jPanel1, gbc);

    gbc = getGbc(1, 0, 4, 1, 0.75);
    gbl.setConstraints(jPanel2, gbc);

    gbc = getGbc(2, 0, 3, 1, 0.5);
    gbl.setConstraints(jPanel3, gbc);

    gbc = getGbc(0, 3, 3, 1, 0.5);
    gbl.setConstraints(jPanel4, gbc);

    gbc = getGbc(1, 4, 2, 1, 0.25);
    gbl.setConstraints(jPanel5, gbc);

    gbc = getGbc(2, 3, 3, 1, 0.5);
    gbl.setConstraints(jPanel6, gbc);

    add(jPanel1);
    add(jPanel2);
    add(jPanel3);
    add(jPanel4);
    add(jPanel5);
    add(jPanel6);

    setVisible(true);
}

private GridBagConstraints getGbc(int x, int y, int height, int width, double weightY) {
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = x;
    gbc.gridy = y;
    gbc.gridheight = height;
    gbc.gridwidth = width;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1.0;
    gbc.weighty = weightY;

    return gbc;
}

private void unimportantStuff() {
    jPanel1 = new javax.swing.JPanel();
    jPanel2 = new javax.swing.JPanel();
    jPanel3 = new javax.swing.JPanel();
    jPanel4 = new javax.swing.JPanel();
    jPanel5 = new javax.swing.JPanel();
    jPanel6 = new javax.swing.JPanel();

    jPanel1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    jPanel2.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    jPanel3.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    jPanel4.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    jPanel5.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    jPanel6.setBorder(BorderFactory.createLineBorder(Color.BLACK));
}

public static void main(String[] args) {
    new GridMask();
}
}

结果是一个 JFrame,其中两行具有不同的高度,但一行中的单元格具有相同的高度。

【问题讨论】:

  • 我不明白你在问什么。图表对我来说看起来不错。发布您的 SSCCE 来证明问题。
  • @camickr:已添加; MarkW:对不起,只是一个错字

标签: java swing gridbaglayout


【解决方案1】:

但一行中的单元格高度相同。

gbc.fill = GridBagConstraints.BOTH;

您是在告诉布局调整所有组件的大小以填充每个单元格中的可用空间。

【讨论】:

  • 不应该将权重与填充结合起来告诉布局此列有两行,一行使用面板大小的 3/4,另一行使用 1/4?我错了还是应该只在所有地方使用填充物,但仍然尊重重量?
  • @NeedCoffee,“权重”约束用于指示调整大小行为时会发生什么。组件被分配了它们的首选大小。然后,如果您有额外的 40 像素可使用,则根据“权重”百分比分配空间。因此组件将获得 0.75、0.25 或 0.50。如果使用“填充”,则所有组件都将调整到最大空间。阅读 How to Use GridBagLayout 上的 Swing 教程部分,了解有关约束如何工作的更详细说明。
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 2023-03-28
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多