Jason. Cała informatyka w jednym miejscu!

Idziemy dalej z menedżerami układów biblioteki "Swing" w języku Java! Dzisiaj zaprezentuję Wam jak za pomocą kolejnej odmiany, "GridLayout" w "Swing", sprawić żeby komponenty układały się w siatkę o konkretnej liczbie rzędów i kolumn.

"GRIDLAYOUT" W "SWING" DLA SIATKOWYCH ROZMIESZCZEŃ

Potrzebujecie siatki komponentów? Umożliwi to Wam ten menedżer układu! Wprowadzając liczbę rzędów i kolumn do konstruktora, menedżer automatycznie dostosowuje wielkości komponentów tak, aby wszystkie jak jeden przestrzegały tego samego rozmiaru. Dzięki temu powstają ładnie wyglądające "okienka", które na dodatek są rozciągliwe, a także zostaje im przydzielona szerokość i wysokość ekranu dzielona przez rzędy i kolumny. To znaczy, że rozciągając okno, "GridLayout" w "Swing" natychmiastowo nam dostosuje rozmiary wszystkich komponentów wchodzących w skład grupy obiektów należących do tego menedżera.

Raz kolejny zobrazujemy to sobie przykładem. Metoda "main" jak zawsze oraz klasa "JFrame":

KLASA "MAIN"

public class Main {
	public static void main(String[] args) {
		new SwingFrame();
	}
}

KLASA "SWINGFRAME"

import java.awt.*;
import javax.swing.*;

public class SwingFrame extends JFrame {
	private static final int ROWS = 7;
	private static final int COLUMNS = 5;

	public SwingFrame() {
		super();
		setLayout(new GridLayout(ROWS, COLUMNS));
		setVisible(true);
		setResizable(false);
		setTitle("Box Layout");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(640, 480);
		setLocationRelativeTo(null);
		addToFrame();
	}

	private void addToFrame() {
		for (int y = 1; y <= ROWS; ++y) {
			for (int x = 1; x <= COLUMNS; ++x) {
				add(new JButton("(" + x + ", " + y + ")"));
			}
		}
	}
}

"GridLayout" w "Swing" nie robi żadnych problemów co do "wstawiania" w określone miejsca, zatem dozwolone jest zastosowanie tego zarówno dla ramki, jak i dla panelu. Ze względu na uniknięcie zbędnych komplikacji odpuściłem sobie osobne dzielenie komponentów na "JPanel" i "JFrame" więc macie kod, który tworzy listę przycisków i układa je siatkowo w ramce. Po skompilowaniu i uruchomieniu, ujrzycie trzydzieści pięć przycisków elegancko ułożonych siatkowo.

W kodzie zawarłem dwie statyczne stałe finalne, które dostosowują liczbę rzędów i kolumn dla ramki. Następnie pętle "for" dodają do każdej "kratki" nowy przycisk z wypisanymi współrzędnymi, które odpowiadają notacji dwuwymiarowego układu współrzędnych. Ważne jest, aby wiedzieć, że nie musimy wypełniać całej przestrzeni. Możemy zostawić sobie kilka wolnych miejsc i nie przejmować się ewentualnymi komplikacjami.

Dodawanie komponentów odbywa się tak samo, jak przy poprzednich menedżerach. Nie podaje się koordynatów X i Y jak niektórzy mogli pomyśleć, a przynajmniej nie odbywa się to w sposób wygodny. Bardzo istotnym czynnikiem wyróżniającym oba poprzednie menedżery jest to, że tak jak "BorderLayout", występuje skalowanie rozmiarów komponentów względnie do rozmiaru okna. Automatycznie dostosowują się wszystkie komponenty, które zostały osadzone do "GridLayout" w "Swing". Warto jeszcze wiedzieć, jak się kończy próba dodania nowego komponentu w przypadku przekroczenia wolnych miejsc. Wystąpi po prostu wyjątek.

"GridLayout" w Swing

"GridLayout" w "Swing" umieszcza wszystkie komponenty w sposób "siatkowy" wykorzystując tyle rzędów i kolumn, ile zostało podanych w konstruktorze.


To już koniec wypowiedzi. Jeżeli potrzebujecie bardziej uszczegółowionych konfiguracji układu siatkowego, tutaj "GridLayout" w "Swing" nie wystarczy. Zapraszam tutaj jeśli interesuje Was wpis o zaawansowanej odmianie tego samego noszącej nazwę "GridBagLayout".

PODOBNE ARTYKUŁY