Szukaj…


Składnia

  • frame.setLayout (new GridBagLayout ()); // Ustaw GridBagLayout dla ramki
  • pane.setLayout (new GridBagLayout ()); // Ustaw GridBagLayout dla panelu
  • Panel JPanel = nowy JPanel (nowy GridBagLayout ()); // Ustaw GridBagLayout dla panelu
  • GridBagConstraints c = new GridBagConstraints () // Zainicjuj GridBagConstraint

Jak działa GridBagLayout?

Układy są używane zawsze, gdy chcesz, aby komponenty nie były wyświetlane obok siebie. GridBagLayout jest przydatny, ponieważ dzieli okno na wiersze i kolumny, a Ty decydujesz, w którym wierszu i kolumnie umieścić komponenty, a także ile wierszy i kolumn jest duży.

Weźmy to okno jako przykład. Linie siatki zostały zaznaczone, aby pokazać układ.

Wizualizacja GridBagLayout

Tutaj stworzyłem 6 komponentów, ułożonych za pomocą GridBagLayout.

Składnik Pozycja Rozmiar
JLabel : „My Amazing Swing Application” 0, 0 3, 1
JButton : „Button A” 0, 1 1, 1
JButton : „Button B” 1, 1 1, 1
JButton : „Button C” 2, 1 1, 1
JSlider 0, 2 3, 1
JScrollBar 0, 3 3, 1

Zauważ, że pozycja 0, 0 znajduje się w lewym górnym rogu: wartości x (kolumna) rosną od lewej do prawej, wartości y (wiersz) rosną od góry do dołu.

Aby rozpocząć układanie komponentów w GridBagLayout , najpierw ustaw układ JFrame lub panelu zawartości.

frame.setLayout(new GridBagLayout());
//OR
pane.setLayout(new GridBagLayout());
//OR
JPanel pane = new JPanel(new GridBagLayout()); //Add the layout when creating your content pane

Pamiętaj, że nigdy nie definiujesz rozmiaru siatki. Odbywa się to automatycznie po dodaniu składników.

Następnie musisz utworzyć obiekt GridBagConstraints .

GridBagConstraints c = new GridBagConstraints();

Aby upewnić się, że komponenty wypełniają rozmiar okna, możesz ustawić wagę wszystkich komponentów na 1. Ciężar służy do określenia, jak rozdzielić przestrzeń między kolumny i wiersze.

c.weightx = 1;
c.weighty = 1;

Inną rzeczą, którą możesz chcieć zrobić, jest upewnienie się, że komponenty zajmują jak najwięcej poziomej przestrzeni.

c.fill = GridBagConstraints.HORIZONTAL;

Możesz również ustawić inne opcje wypełnienia, jeśli chcesz.

GridBagConstraints.NONE //Don't fill components at all
GridBagConstraints.HORIZONTAL //Fill components horizontally
GridBagConstraints.VERTICAL //Fill components vertically
GridBagConstraints.BOTH //Fill components horizontally and vertically

Tworząc komponenty, będziesz chciał ustawić, gdzie na siatce powinien się znaleźć i ile płytek siatki powinien użyć. Na przykład, aby umieścić przycisk w trzecim rzędzie w drugiej kolumnie i zająć miejsce w siatce 5 x 5, wykonaj następujące czynności. Pamiętaj, że siatka zaczyna się od 0, 0 , a nie 1, 1 .

JButton button = new JButton("Fancy Button!");
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 5;
c.gridheight = 5;
pane.add(buttonA, c);

Podczas dodawania komponentów do okna pamiętaj, aby przekazać ograniczenia jako parametr. Można to zobaczyć w ostatnim wierszu w powyższym przykładzie kodu.

Możesz użyć tych samych ograniczeń GridBagConstraints dla każdego składnika - zmiana go po dodaniu składnika nie zmienia wcześniej dodanego składnika.

Przykład

Oto kod przykładu na początku tej sekcji.

JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed

JPanel pane = new JPanel(new GridBagLayout()); //Create a pane to house all content, and give it a GridBagLayout
frame.setContentPane(pane);

GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.HORIZONTAL;

JLabel headerLabel = new JLabel("My Amazing Swing Application");
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 0;
pane.add(headerLabel, c);

JButton buttonA = new JButton("Button A");
c.gridx = 0;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonA, c);

JButton buttonB = new JButton("Button B");
c.gridx = 1;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonB, c);

JButton buttonC = new JButton("Button C");
c.gridx = 2;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonC, c);

JSlider slider = new JSlider(0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 2;
pane.add(slider, c);

JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 20, 20, 0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 3;
pane.add(scrollBar, c);

frame.setVisible(true); //Show the window

Przykład GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow