如何在 GridBagLayout 中设置组件的大小

How to set the component's size inside a GridBagLayout

据我所知,在 GridLayout 和 GrigBagLayout 中调整组件大小真的很难。就我而言,我有一个包含 2 列和 2 行的 GridBagLayout。第一行有 2 个标签,第二行有 2 个扩展 JTable 的组件(类型 Tablero)。

我的问题是,我无法让这 2 个 JTable 填充 JFrame 直到其底部。我试过 setSize(), setPreferredSize(), setBounds()... 但它们根本不起作用。我也尝试过 constraints.fill = GridBagConstraints.VERTICAL/SOUTH/CENTER... 但我什么也没得到。 我也尝试过在 JFrame 中设置 JPanel 的大小,但它不起作用...

这是我的代码:

public static void main(String[] args)
{

    JFrame pantalla = new JFrame();

    pantalla.getContentPane().setLayout(new GridBagLayout());
    GridBagConstraints constraints = new GridBagConstraints();

    JLabel tab1Label = new JLabel("Tablero 1");
    JLabel tab2Label = new JLabel("Tablero 2");

    Tablero tablero1 = new Tablero();
    Tablero tablero2 = new Tablero();
    tablero1.setPreferredSize(new Dimension(400,400));
    tablero1.setBounds(0, 0, 400, 400);

    tablero1.setBorder(new LineBorder(Color.gray, 2));

    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.insets = new Insets(0, 0, 20, 0);
    pantalla.getContentPane().add(tab1Label, constraints);

    constraints.gridx = 1;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.insets = new Insets(0, 0, 20, 0);
    pantalla.getContentPane().add(tab2Label, constraints);

    constraints.insets = new Insets(0, 0, 0, 0);

    constraints.fill = GridBagConstraints.VERTICAL;
    constraints.gridx = 0;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    pantalla.getContentPane().add(tablero1, constraints);

    constraints.fill = GridBagConstraints.VERTICAL;
    constraints.gridx = 1;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    pantalla.getContentPane().add(tablero2, constraints);

    pantalla.pack();
    pantalla.setSize(800, 400);
    pantalla.setVisible(true);
    pantalla.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

结果如下:

我知道还有其他方法更容易实现,但实际上必须使用 GridBagLayout。

尝试将 constraints.weightx = 1;constraints.weighty = 1; 添加到您的 JTables 约束中。

同时删除那些行:

tablero1.setPreferredSize(new Dimension(400,400));
tablero1.setBounds(0, 0, 400, 400);