首页 > 解决方案 > 如何在 GridBagLayout 中使中间列大于侧列?

问题描述

我正在尝试进行 3 列布局。我怎样才能让中间柱比侧柱大?我正在使用GridBagLayoutJava Swing。我在搞乱,GridWidth但它不起作用。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class GridBag extends JFrame{

    JPanel j1, j2, j3;
    GridBagConstraints gbc = new GridBagConstraints();
    public GridBag() {
        super("Pandemic");
        setSize(1000, 500);         //suggested size
        setLocationRelativeTo(null);    
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLayout(new GridBagLayout());
        j1 = new JPanel();
        j1.setBackground(Color.blue);
        j2 = new JPanel();
        j2.setBackground(Color.red);
        j3 = new JPanel();
        j3.setBackground(Color.yellow);
        gbc.weightx = 0.5;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 3;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.ipady = 1000;
        this.add(j1, gbc);
        
        gbc.gridx = GridBagConstraints.RELATIVE;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        this.add(j2, gbc);
        
        gbc.gridx = GridBagConstraints.RELATIVE;
        gbc.gridy = 0;
        this.add(j3, gbc);
        
        this.setVisible(true);
        
    }
    public static void main(String[] args) {
        new GridBag();

    }
    //end main
}

https://i.stack.imgur.com/rJwQr.png

标签: javaswinglayout-managergridbaglayout

解决方案


我在搞乱网格宽度,但它不起作用。

你不能只是随机地给一个组件一个随机数的网格宽度。单行上只有 3 个组件,因此每个组件的宽度只能为 1。

但是,如果您的第二行有两个组件,那么您可以将其中一个组件的宽度设为 2,将另一个组件的宽度设为 1。

我怎样才能让中间柱比侧柱大?

gbc.weightx = 0.5;

上面指定了当框架的大小大于每个组件的首选大小时,如何为每个组件分配额外的空间。

如果您不更改约束,则对所有组件使用相同的值(因为您使用相同的 GridBagConstraints 对象)。

在您的示例中,所有组件都使用相同的“weightx”,因此所有组件的大小都相同。

这是您需要更改的约束。如果您希望组件具有不同的大小,则组件需要有所不同。

尝试使用:

gbc.weightx = 0.25;

对于蓝色和黄色分量。现在红色组件的大小大约是原来的两倍。

gbc.ipady = 1000;  

您可能应该使用“填充”约束来填充每个面板的垂直高度。然后它将自动增长以填充框架中的可用空间。

阅读有关如何使用 GridBagLayout的 Swing 教程以获取更多信息和示例。


推荐阅读