Zrozumienie ograniczeń GridBagLayout

Jestem stosunkowo nowy w swingowaniu i staram się dokładnie zrozumieć, jak to działa. Powiedz mi, jeśli się mylę.

Zwykle odkryłem gridx i gridy, które są niezbędne do umieszczenia komponentu. Aby utworzyć siatkę nxn, potrzebujesz co najmniej n wartości (gridx, gridy). Na przykład (5,5), (3,3), (4,9), (3,10) utworzy obszar siatki 3x4 (4 wiersze, 3 kolumny) ze składnikami, używając odpowiednio umieszczonego powyżej (gridx, gridy) w komórkach (3,2), (1,2), (2,3), (1,4).

weightx i weightty wydają się mieć 2 funkcje,> 0 wartości weightx i weighty rozciągają komórki siatki na krawędzie (w przeciwnym razie są scentralizowane) i możemy również ustawić proporcje do rozmiaru komponentu - więc jeśli jeden komponent ma gridx = 0.1 i anothr ma 0.2, a późniejszy będzie prawdopodobnie dwa razy szerszy. Jednak podczas dozowania składników przestrzegana jest minimalna domyślna szerokość i wysokość komponentu.

wypełnienie jest wymagane do rozciągnięcia komponentu na krawędzie komórek. Bez wypełnienia komponent pozostanie w środku.

ale w takich przypadkach możemy użyć kotwicy, aby umieścić element mówiący wzdłuż północno-zachodniego rogu komórki zamiast środka.

wstawki tworzą ścianę przestrzeni wewnątrz krawędzi komórki.

ipadx i ipady przesuwają granice kolumny lub wiersza zawierającego komórkę.

Ale Nie jestem w stanie dobrze zrozumieć, jak działa siatka i siatka.

Rozważ toprzykład poniżej.Tutaj znajdują się 4 przyciski w komórkach b1 (3,2), b2 (1,1), b3 (2,3), b4 (4,4) przestrzeni siatki 4x4.

Jak sprawić, aby przyciski, powiedzmy b2 lub b4, zajmowały cały rząd lub kolumnę komórki, którą zajmuje?

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);

}
}

EDYTOWAĆ: Tutaj jestLINK DO OBRAZU http://postimg.org/image/wae2x4w4z/

Chcę, aby którykolwiek z przycisków był w stanie wypełnić cały wiersz lub kolumnę, lub wziąć co najmniej 2 komórki z rzędu.

questionAnswers(3)

yourAnswerToTheQuestion