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) 👍.
![]() |
"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
