Java Swing GridBagLayout

标签 java swing gridbaglayout

我正在编写一个 Java gui 来模仿一些文书工作,特别是一种具有许多仅在运行时才知道的“行”的表单,并且这些行被分成两部分(50%-50%,一个标签和一个条目)或分为 25% 75%,(比方说一个数字和一个完整的句子)。

有人会认为已经说过(这里只显示突出的行,下面是更完整的代码)

GridBagConstraints c = new GridBagConstraints();
...
c.gridx = 0;
c.gridwidth = 2;
...
mainPanel.add(l, c);

其次是:

c.gridx = 2;
c.gridwidth = 4;
...
mainPanel.add(l, c);

将“确定”在 x 方向上,面板分为 4,给我 50-50,这应该让我可以自由地这样做以获得 25%-75% 的版本:

GridBagConstraints c = new GridBagConstraints();
...
c.gridx = 0;
c.gridwidth = 1;
...
mainPanel.add(l, c);

其次是:

c.gridx = 1;
c.gridwidth = 3;
...
mainPanel.add(l, c);

但我得到的是所有行都分为 50-50。我能够将行划分为 50-50,然后其他行不划分,这对于初步版本来说是可以的。

我是否误解了这里的工作方式?我在“类似问题”边栏中注意到这篇文章 (http://stackoverflow.com/questions/7509781/java-gridbaglayout-automated-construction) 推荐 MiG 布局,我会认真考虑。

相关代码如下,项目的其余部分是一个标准的空 NetBeans Java 桌面应用程序:

public class GridBagDemoView extends FrameView {
public GridBagDemoView(SingleFrameApplication app) {
    super(app);

    initComponents();

    // Reset the grid position
    nextGridY = 0;


    addLine_50_50("50", "50");
    addLine_50_50("50", "50");
    addLine_50_50("50", "50");
    addLine_50_50("50", "50");

    addLine_25_75("25", "75");
    addLine_25_75("25", "75");
    addLine_25_75("25", "75");
    addLine_25_75("25", "75");


    mainPanel.validate();
    mainPanel.revalidate();
    mainPanel.repaint();

}

private void addLine_50_50(String left, String right) {

    GridBagConstraints c = new GridBagConstraints();

    // "Universal" settings
    c.fill = GridBagConstraints.HORIZONTAL;
    c.insets = new Insets(5, 5, 5, 5);
    c.anchor = GridBagConstraints.NORTHWEST;
    c.gridheight = 1;
    c.weightx = 1;
    c.weighty = 1;

    // Settings for the labels (LHS of panel)
    JTextArea l = new JTextArea();
    l.setText(left);
    c.gridx = 0;
    c.gridy = nextGridY;
    c.gridwidth = 2;
    c.weightx = 1;
    mainPanel.add(l, c);

    // Settings for the text (RHS of panel)
    JTextArea ta = new JTextArea();
    ta.setText(right);
    c.gridx = 2;
    c.gridy = nextGridY;
    c.gridwidth = 2;
    c.weightx = 1;
    mainPanel.add(ta, c);

    // Increase row number of next line
    nextGridY++;
}

private void addLine_25_75(String left, String right) {

    GridBagConstraints c = new GridBagConstraints();

    // "Universal" settings
    c.fill = GridBagConstraints.HORIZONTAL;
    c.insets = new Insets(5, 5, 5, 5);
    c.anchor = GridBagConstraints.NORTHWEST;
    c.gridheight = 1;
    c.weighty = 1;

    // Settings for the labels (LHS of panel)
    JTextArea l = new JTextArea();
    l.setText(left);
    c.gridx = 0;
    c.gridy = nextGridY;
    c.gridwidth = 1;
    c.weightx = 1;
    mainPanel.add(l, c);

    // Settings for the lext (RHS of panel)

    JTextArea ta = new JTextArea();
    ta.setText(right);
    c.gridx = 1;
    c.gridy = nextGridY;
    c.gridwidth = 3;
    c.weightx = 1;
    mainPanel.add(ta, c);

    // Increase row number of next line
    nextGridY++;

}
Generated code etc...

最佳答案

据我所知,网格包布局不会强制列的宽度相等。所以你得到的可能是第一列的宽度为 50%,第二列和第三列的宽度为 0 或接近零,第四列再次为 50%。

尝试制作一行,分别填写四列中的每一列。确保使用 weightx 选项。

关于Java Swing GridBagLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8463227/

相关文章:

java - 全屏和窗口模式 Jframe

java - 如何摆脱 java swing 中 JPanel 中的额外填充

java - Maven 和 Jetty 在 Windows 机器上工作,而不是在 Linux 上工作

java - 该元素既没有附加源也没有附加 Javadoc,因此找不到 Javadoc

java - 查看基于 Maven 的 IntelliJ 项目中的非项目文件

java - 如何使用GridBagLayout实现这种布局?

java - 如何在 JFrame 中正确居中 JPanel ( FIXED SIZE )?

java - 使用 java 服务器处理对 XML 文件的并发访问

Java - 调用不在范围内的对象的方法( parent 的 child )

java - 使用 keylistener 在 jpanel 周围移动圆圈