Entendiendo las restricciones de GridBagLayout

Soy relativamente nuevo en el swing y estoy tratando de averiguar exactamente cómo funciona. Dime si estoy equivocado.

Principalmente he descubierto gridx y gridy lo que es necesario para colocar un componente. Necesita al menos n valores de (gridx, gridy) para crear una cuadrícula nxn. Por ejemplo, (5,5), (3,3), (4,9), (3,10) creará un espacio de cuadrícula de 3x4 (4 filas, 3 columnas) con los componentes que usan los anteriores (gridx, gridy) colocados respectivamente en celdas (3,2), (1,2), (2,3), (1,4).

El peso x y el peso parecen tener 2 funciones, un valor> 0 de peso x y el peso pesan las celdas de la cuadrícula hasta los bordes (de lo contrario, está centralizado) y también podemos establecer proporciones según el tamaño del componente, por lo tanto, si un componente tiene gridx = 0.1 y Anothr tiene 0.2, entonces el último probablemente sea el doble de ancho. Sin embargo, al proporcionar componentes, se respetan el ancho y la altura mínimos predeterminados de un componente.

Se requiere relleno para estirar un componente hasta los bordes de las celdas. Sin relleno, el componente permanecerá en el centro.

pero podemos usar el anclaje en tales casos para ubicar el componente a lo largo de la esquina noroeste de la celda en lugar del centro.

las inserciones crean una pared de espacio dentro de los bordes de la celda.

ipadx e ipady empujan los límites de la columna o fila que contiene la celda.

Pero No puedo entender muy bien cómo funciona el ancho de cuadrícula y la altura de cuadrícula.

Considera estoejemplo abajo.Aquí se colocan 4 botones en las celdas b1 (3,2), b2 (1,1), b3 (2,3), b4 (4,4) de cuadrícula de 4x4.

¿Cómo hago que los botones, digamos b2 o b4, ocupen toda la fila o columna de la celda que está ocupando?

import javax.swing.*;
import java.awt.*;
//import java.awt.event.*;
public class Swing29a
{
public static void main(String[] args)
{
JFrame f1= new JFrame("GridBag Layout Test");

f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setResizable(true);
f1.setLocation(200,100);
f1.setSize(800,800);

JPanel p1 = new JPanel();
p1.setBackground(Color.black);
f1.add(p1);


JButton b1= new JButton("Button 1");
b1.setBackground(Color.white);

JButton b2= new JButton("Button 2");
b2.setBackground(Color.white);

JButton b3= new JButton("Button 3");
b3.setBackground(Color.white);

JButton b4= new JButton("Button 4");
b4.setBackground(Color.white);



GridBagLayout gm1= new GridBagLayout();
p1.setLayout(gm1);
GridBagConstraints cns =new GridBagConstraints();

cns.gridx=5;
cns.gridy=5;
cns.weightx=0.1;
cns.weighty=0.1;
cns.fill=GridBagConstraints.BOTH;

p1.add(b1,cns);

cns.gridx=3;
cns.gridy=3;
p1.add(b2,cns);


cns.gridx=4;
cns.gridy=9;
p1.add(b3,cns);

cns.gridx=7;//3;
cns.gridy=10;
cns.gridheight=3;
cns.weightx=0.2;
cns.weighty=0.2;
//cns.weightx=10.0;
//cns.weighty=9.0;    
//cns.ipadx=50;
//cns.ipady=50;
p1.add(b4,cns);

f1.setVisible(true);

}
}

EDITAR: Aquí hay unENLACE A LA IMAGEN http://postimg.org/image/wae2x4w4z/

Quiero que cualquiera de los botones pueda llenar toda la fila o columna, o tomar al menos 2 celdas seguidas.

Respuestas a la pregunta(3)

Su respuesta a la pregunta