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.