Materiał uzupełniający na temat biblioteki "Swing" języka Java 📜! Znajdziesz w nim informacje na temat tego, czym jest układ w "Swing", jak go ustawić dla ramki i panelu ("JFrame" i "JPanel") oraz jakie występują rodzaje i czym się charakteryzują 💡. Jak interesuje Cię zgłębianie biblioteki "Swing", to prosimy do środka 🔍!
UKŁAD W "SWING" ELEMENTEM USTALAJĄCYM ROZMIESZCZANIE KOMPONENTÓW
Nie dopatrzyłem się żadnej książkowej definicji czym jest "układ" w języku Java, jeśli mówimy o bibliotece "Swing", więc określę to własnymi słowami ✒️.
Co to jest układ?
Układ (ang. layout) stanowi zbiór reguł rozmieszczeń innych komponentów jak mają się one zachowywać, gdy są wstawione do innego większego komponentu pełniącego funkcję "rodzica" czy też "kontenera" 💡.
W "Swing", obiektem macierzystym każdej aplikacji jest "JFrame", czyli "ramka". Ona pełni funkcję "okna" aplikacji i to właśnie ten element jest "rodzicem" innych komponentów jakie się w nim znajdą 🔲.
Rodzaje układów
Po najbardziej szczegółowe informacje kieruję bezpośrednio do dokumentacji Javy, natomiast poniżej przedstawiam te, o których możesz poczytać więcej w załączonych artykułach 👇:
- "BorderLayout",
- "FlowLayout",
- "BoxLayout",
- "GridLayout",
- "GridBagLayout".
Mały opis każdego z nich.
BorderLayout
Układ w "Swing" posiadający 5 "gniazd" (tzw. "regionów"), do których możemy dodać po jednym komponencie i nie więcej ✋.
![]() |
Wygląd rozmieszczenia komponentów w układzie "BorderLayout".
FlowLayout
Układ pozycjonujący komponenty w jednym rzędzie. Wymiary każdego z nich są nieregularne i zależne od zawartości w środku. Jeżeli układ dotyczy ramki i komponent nie mieści się w danym rzędzie, wtedy jest przeniesiony niżej. Jak dotyczy panelu, wtedy układ ignoruje to, że komponenty nie mieszczą się w oknie ⚠️.
![]() | ![]() |
Wygląd rozmieszczenia komponentów w układzie "FlowLayout".
BoxLayout
Układ pozycjonujący komponenty w jednym rzędzie bądź kolumnie (tutaj możemy sobie ustalić oś). Wymiary każdego z nich są nieregularne i zależne od zawartości w środku.
![]() | ![]() |
Wygląd rozmieszczenia komponentów w układzie "BoxLayout".
GridLayout
Układ pozycjonujący komponenty w formie siatki z możliwością ustawienia liczby rzędów i kolumn. Wymiary każdego z nich są takie same i regulują się na bieżąco w zależności od wymiarów komponentu "rodzica".
![]() |
Wygląd rozmieszczenia komponentów w układzie "GridLayout".
GridBagLayout
Najbardziej zaawansowany ze wszystkich układów umożliwiający tworzenie niestandardowych widoków 🔴. Komponenty są ułożone również w formie siatki, natomiast tutaj jest elastyczna konfiguracja ile kratek dany komponent ma zajmować, w którym miejscu itd.
![]() |
Wygląd rozmieszczenia komponentów w układzie "GridBagLayout".
Jak ustawić układ?
Zarówno w ramce (obiekcie typu "JFrame"), jak i w panelu (obiekcie typu "JPanel"), służy nam do tego metoda, "setLayout" 👇:
setLayout([układ]);Jeżeli jednak zmieniamy układ w panelu, to możemy też go ustawić korzystając z konstruktora klasy bazowej, stosując słowo kluczowe "super":
public class DerivedJPanel extends JPanel {
public DerivedJPanel() {
super([układ]);
}
}Wyjątkiem jest "BoxLayout", które uniemożliwia nam skorzystanie z takiego sposobu zapisu z powodu pierwszego parametru, jakim jest wskazanie komponentu, który ma ten układ posiadać:
new BoxLayout(this, …);To dlatego, że w momencie instrukcji "super", referencja "nie jest jeszcze gotowa", aby ją wskazać w parametrze jako "this".
Z cyklu "Warto wiedzieć"
Ostatnie parę zdań informacji, których trzeba być świadomym/świadomą 😉.
Patrz, gdzie dodajesz komponenty
To, do czego dodasz inne komponenty podlegające pod wskazany układ, wpływa na efekt końcowy ℹ️. Innymi słowy, wstawienie komponentów do ramki ("JFrame") bądź do panelu ("JPanel"), może przynieść inne skutki.
Widać to choćby po "FlowLayout", które nałożone na ramkę sprawi, że komponenty będą "przechodzić" na niższe rzędy jeśli nie starczy dla nich miejsca w szerokości. Z kolei, gdy zaczniemy je dodawać do panelu, to będą cały czas występować w jednym rzędzie, nawet jeśli zaczną wychodzić poza wymiary ramki! Także miej na to uwadze 🫵!
Zagnieżdżone "komponenty-kontenery" w ramce
Ramka jest obiektem "macierzystym" każdej aplikacji w "Swing" 🔲. Możesz do niej dodawać przyciski i teksty. Natomiast równie dobrze możesz wstawić cały panel jako "wewnętrzny kontener", który też będzie posiadał własny układ, tworząc w ten sposób zagnieżdżenie 🙂.
Domyślne układy ramki i panelu
"JFrame" i "JPanel" różnią się domyślnymi układami ⚠️. "JFrame" posiada "BorderLayout", a "JPanel" ma na sobie "FlowLayout", tak więc jeżeli pasują nam te układy, to nie musimy niczego zmieniać 👍.
Myślę, że dostatecznie wyczerpałem temat układów w "Swing" 🌟. Od teraz możesz z jeszcze większą świadomością programować swoje aplikacje graficzne 😄!
NASTĘPNY ARTYKUŁ: BorderLayout w Swing. Układ komponentu JFrame






