Dzisiaj zaprezentuję Tobie jak za pomocą jednego z kolejnych układów w "Swing""GridLayout" w "Swing", sprawić żeby komponenty układały się w siatkę o konkretnej liczbie rzędów i kolumn ⬜.

"GRIDLAYOUT" W "SWING" STWORZONY Z MYŚLĄ O "SIATKOWYCH" ROZMIESZCZENIACH

Potrzebujesz ułożyć komponenty w formie siatki? Umożliwi Ci to "GridLayout" 😎! Jak sama nazwa wskazuje, jest odpowiedzialna za rozmieszczanie komponentów w formie siatki - prostokątnego obszaru, w którym każdy komponent ma dokładnie te same wymiary, co każdy inny należący do tego układu 😊.

Wprowadzając liczbę rzędów i kolumn do konstruktora, układ 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 💡.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Raz kolejny zobrazujemy to sobie prostym przykładem. Wypełnienie przestrzeni "GridLayout" przyciskami z oznaczeniami indeksów w osiach X i Y, tak dla zabawy 😄.

KLASA "MAIN"
public class Main {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(MainJFrame::new);
	}
}

Ta sama metoda "main" jak zawsze i konstruktor umieszczony wewnątrz wywołania "invokeLater" 🙂.

KLASA "MAINJFRAME"
import java.awt.*;
import javax.swing.*;

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

	public MainJFrame() {
		configureFrame();
		addButtonsToFrame();
	}

	private void configureFrame() {
		setTitle("Układ GridLayout w Swing");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setResizable(false);
		setSize(512, 256);
		setLocationRelativeTo(null);
		setLayout(new GridLayout(ROWS, COLUMNS));
	}

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

Teraz nasza "ramka". W kodzie u samej góry, zawarłem dwie statyczne stałe finalne, za pomocą których możesz sobie dostosować liczbę rzędów i kolumn dla układu ramki, bo tym razem osadzamy "GridLayout" bezpośrednio do niej ✔️.

Metoda "configureFrame" zawiera w sobie te same instrukcje widziane w poprzednich przykładach, więc skupię się tylko na "setLayout". "GridLayout" w "Swing", jak wspomniałem, potrzebuje dwóch wartości ustalających liczbę rzędów i kolumn. A to, ile będzie finalnie przeznaczonego miejsca na każdą z komórek, będzie decydować wielkość okna aplikacji ℹ️.

W drugiej metodzie dodajemy nasze przyciski do ramki ⏏️. Zwróć uwagę, że nie ma "getContentPane" - od razu korzystamy z wywołania "add" (bo teraz ramka nie korzysta z układu "BorderLayout")! Ponieważ mamy z góry przyjęte ile ma być rzędów i kolumn, możemy bez problemu skorzystać z pętli "for", aby dodać przycisk do odpowiedniego pola "w siatkowym" układzie ✅. Do konstruktora "JButton" wstawiamy odpowiednio sformatowany łańcuch znaków do wyświetlania numeracji w osi X (kolumny) i Y (rzędy) 💡.

Zauważyłeś(-aś) słowo "var" w pętlach 🙂? To jest wygodne uniknięcie definiowania samemu typu zmiennej 🔥! Zapraszam do stosownego materiału po więcej szczegółów ◀️.

Pamiętaj, że nie musimy wypełniać całej przestrzeni. Możemy zostawić sobie kilka wolnych miejsc i wówczas zostaną widoczne puste przestrzenie na ekranie ℹ️. Co innego, jak próbujemy dodać dowolny komponent w przypadku przekroczenia wolnych miejsc. Wtedy wystąpi wyjątek.

"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 (przy czym pamiętaj, że osadzenie w panelu może narzucać inne wymiary komponentom!). Po skompilowaniu i uruchomieniu, ujrzycie 25 przycisków elegancko ułożonych w formie siatki (tak, jak widać na obrazku poniżej) 👍.

Wygląd przycisków w ramce "JFrame" z układem "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ż wszystko co warto wiedzieć o "GridLayout" 😉.

NASTĘPNY ARTYKUŁ: GridBagLayout w Swing. Nieregularny siatkowy układ komponentów

PODOBNE ARTYKUŁY