Podczas omawiania poprzednich tematów z biblioteki "Swing" (język Java) padło wielokrotnie hasło: "BorderLayout" 🔔. Co to konkretnie jest "BorderLayout" w "Swing"? Niech zawartość artykułu rozwieje te wątpliwości raz na zawsze 😄!

"BORDERLAYOUT" W "SWING" JEST JEDNYM Z UKŁADÓW!

O samym pojęcie układu wypowiedziałem się w odrębnym artykule, więc ten materiał zakłada, że już go przeczytałeś(-aś) i dobrze wiesz co to jest 🙃. A tu się przyjrzymy czym jest "BorderLayout". Jak to wygląda? Jak się tym posługiwać? Po kolei 😅!

CZYM JEST "BORDERLAYOUT" W "SWING"?

Konkretnie jest to jeden z dostępnych układów biblioteki "Swing" posiadający 5 tzw. "regionów" ⚠️. W każdym z tych regionów można wstawić jeden komponent ℹ️.

Charakterystyczną cechą "BorderLayout" jest to, iż automatycznie dostosowuje wymiary komponentów "podstawionych" do tych regionów. Jeżeli dla przykładu, jest zajęta tylko część wschodnia, to komponent przyjmie całą wysokość okna ⚠️. Jeżeli natomiast, jest jeszcze dodatkowo część północna, to układ przeznacza miejsce na wysokość dla części północnej "obcinając" wysokość przeznaczoną dla części wschodniej.

W taki sposób działa "BorderLayout" w "Swing" 😉.

JAKIE WYSTĘPUJĄ REGIONY W "BORDERLAYOUT"?

Regiony w układzie "BorderLayout" są następujące 👇:

  1. północną (BorderLayout.NORTH),
  2. południową (BorderLayout.SOUTH),
  3. wschodnią (BorderLayout.EAST),
  4. zachodnią (BorderLayout.WEST),
  5. centralną (BorderLayout.CENTER).

Zwróć uwagę na nietypowe hasła w nawiasach ⚠️! To są zdefiniowane wartości typu wyliczeniowego, którymi posługujemy się w celu określenia do którego regionu, dany komponent chcemy dodać ✅.

W JAKI SPOSÓB SĄ ROZMIESZCZONE REGIONY W "BORDERLAYOUT"?

Poniżej zostawiam rysunek pomocniczy w jaki sposób regiony są ułożone w "BorderLayout" 👇:

Schemat regionów układu "BorderLayout" w "Swing"

"BorderLayout" w "Swing" to domyślny układ komponentu "JFrame" składający się z pięciu "regionów", na których umieszczamy inne komponenty.

W taki sposób wygląda rozmieszczanie komponentów według omawianego schematu. Jeżeli naprawdę chcesz zrozumieć układy w "Swing", polecam zacząć od niego 👍.

PRZYKŁAD KODU ŹRÓDŁOWEGO DZIAŁANIA "BORDERLAYOUT" W "SWING"

Teraz zapoznasz się z kodem źródłowym prostego programu korzystającego z "BorderLayout" w "Swing". Pokaże Ci on również jak korzystać ze wspomnianych regionów 🧡.

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

W tym miejscu odbywa się jedynie inicjalizacja okna "Swing" poprzez skorzystanie z konstruktora klasy "MainFrame" wewnątrz wywołania metody "invokeLater". To jest zalecana forma zapisu, gdy mamy do czynienia z uruchamianiem dowolnej aplikacji biblioteki "Swing" (więcej informacji znajdziesz w internecie) ℹ️.

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

public class MainJFrame extends JFrame {
	private final JButton northButton = new JButton("CZĘŚĆ PÓŁNOCNA");
	private final JButton southButton = new JButton("CZĘŚĆ POŁUDNIOWA");
	private final JButton westButton = new JButton("CZĘŚĆ ZACHODNIA");
	private final JButton eastButton = new JButton("CZĘŚĆ WSCHODNIA");
	private final JButton centeredButton = new JButton("CZĘŚĆ CENTRALNA");

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

	private void configureFrame() {
		setTitle("Układ BorderLayout w Swing");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setResizable(false);
		setSize(1024, 1024);
		setLocationRelativeTo(null);
	}

	private void addButtonsToFrame() {
		var contentPane = getContentPane();

		contentPane.add(BorderLayout.NORTH, northButton);
		contentPane.add(BorderLayout.SOUTH, southButton);
		contentPane.add(BorderLayout.WEST, westButton);
		contentPane.add(BorderLayout.EAST, eastButton);
		contentPane.add(BorderLayout.CENTER, centeredButton);
	}
}

Klasa "MainJFrame" to nasze główne okno, w którym znajduje się (domyślnie) 5 regionów, które opisałem wyżej 👆. Pamiętaj, że "BorderLayout" jest domyślnym układem elementów w "Swing", zatem nie trzeba niczego ustawiać 😄.

Wykorzystujemy dwa importy u góry: "java. awt" i "javax. swing". Aby pojąć dlaczego jest podział na 2 importy i czemu jeden z nich ma literkę 'x' na końcu, trzeba znać historię biblioteki "Swing" 📜. "Swing" ma swoje korzenie w dawnej bibliotece do tworzenia graficznych interfejsów o nazwie "AWT" (Abstract Window Toolkit) ℹ️. Można go uznawać za "następcę", stąd odwołanie do "awt". A literka 'x' wynika z tego, że wcześniej "Swing" był zewnętrznym rozszerzeniem do Javy, nim został dołączony do języka w wersji 1.2 💡.

Do każdego regionu dodajemy sobie przycisk "JButtton" z tekstem odpowiadającym regionowi. Nie będziemy nadpisywać referencji do składowych, zatem możemy oznaczyć je modyfikatorem "final". W konstruktorze mamy 2 wywołania metod.

Metoda "configureFrame" odpowiada za wywołanie serii instrukcji konfigurujących samo okienko 🔧. Większość jest oczywista, więc wyjaśnię tylko niektóre 👇:

  • "setDefaultCloseOperation" określa jak ma zachować się sam proces w momencie zamknięcia okna (jeżeli chcesz, aby zamknięcie okna jednocześnie zamykało cały proces, to musisz ustawić na "JFrame.EXIT_ON_CLOSE" - domyślnie przyjmuje "JFrame.HIDE_ON_CLOSE"),
  • "setVisible" ustawione na "true", sprawi, że okno będzie widoczne (bo domyślnie będzie zminimalizowane - kolejne "gotcha!" języka Java 😏!),
  • "setLocationRelativeTo" ustawia pozycję okna według podanego w parametrze komponentu (korzystam tutaj z takiego "myka", że wpisując wartość "null", zostanie wycentrowane na środku ekranu 💡).

Metoda "addButtonsToFrame" z kolei, dodaje przyciski do poszczególnych regionów układu "BorderLayout". Aby dodawać komponenty do układu, korzystamy z wywołania "getContentPane", które zwraca referencję do typu "Container" - tam znajduje się "zbiornik" komponentów ℹ️. "var" to słowo kluczowe pozwalające uniknąć ręcznego definiowania typu zmiennej lokalnej 👍.

Metoda "add" przyjmuje 2 parametry: stała typu wyliczeniowego zdefiniowania dla regionów (zgodnie z opisem powyżej) i komponent jaki ma się znaleźć 🙂.

Po odpaleniu programu, ujrzysz następujący widok 👇:

Wygląd okna z układem "BorderLayout" w "Swing"

Wygląd okna z układem "BorderLayout" i wstawionymi komponentami we wszystkich 5 regionach.

Czyli dokładnie tak, jak na rysunku powyżej 😄! Na sam koniec przypomnę, że "BorderLayout" jest jednym z kilku dostępnych układów w "Swing". Zapraszam do stosownego artykułu po zapoznanie się z innymi układami 🔍.


Koniec 😄! Gdybyś chciał(a) się bardziej zagłębić w temat, polecam posiłkowanie się dokumentacją Javy ℹ️.

NASTĘPNY ARTYKUŁ: paintComponent w Swing. Metoda rysująca komponentu JPanel

PODOBNE ARTYKUŁY