4 maja, zaczynamy kolejną serię! Będę miał przyjemność pisać Wam na temat biblioteki Swing należącej do Javy, która pozwala na tworzenie graficznych interfejsów użytkownika. Nie będzie o JavaFX! Wiem o jej istnieniu, ale mam swoje powody aby o niej teraz nie pisać. Jak utworzyć pierwsze okno i dlaczego w Swing zapraszam do artykułu.

SWING. KRÓTKA CHARAKTERYSTYKA

Biblioteka zaczęła istnieć od połowy 1997 roku "wypierając" ówczesną technologię AWT ("Abstract Window Toolkit"). Jest ona niezależna od architektury i "przybiera" automatycznie odpowiedni wygląd dostosowany do systemu operacyjnego. To znaczy, że pozostawiając domyślny motyw aplikacji (bo to można zmienić), aplikacja sama dostosuje się do wyglądu systemu, czyli na systemie Windows będzie wyglądać inaczej, a na Linuxie też inaczej, ale cała funkcjonalność zostanie zachowana taka sama.

Budowa elementów polega na utworzeniu tzw. "ramki" którą możemy nazwać "oknem" i włożenia do niej przeróżnych elementów takich jak przyciski, teksty, czy "ptaszki". Następnie przy pomocy punktów odniesienia układu takiej ramki (układ też można zmieniać na inny) dostosowujemy wielkość i położenie tych elementów. Domyślne ustawienia powodują, że będą one "rozciągliwe" i będą automatycznie układać się względem wolnego miejsca na danym obszarze.

DLACZEGO SWING, A NIE JAVAFX?

Swing jest podstawowym tematem każdej porządnej literatury dotyczącej nauki języka Java i to jest główny powód dlaczego uważam, że warto się najpierw nauczyć tej biblioteki mimo swojego wieku. W moim przekonaniu, on ma tutaj najmniejsze znaczenie dopóki się ona nie rozsypuje, a na razie się trzyma. W styczniu, pokazałem jednemu profesorowi swoją aplikację wykorzystującą tę bibliotekę bo myślał o skorzystaniu z niej do celów dydaktycznych. Nie przyjął jej tylko dlatego, że korzystała z biblioteki Swing. Zostawiłem tylko wielokropek na twarzy. Pomyślałem sobie "jakie to ma znaczenie skoro działa jak należy?". Na szczęście to było jedynie zadanie dodatkowe, a i tak już bez tego wychodziła mi dobra ocena więc nie było o co robić awantury.

Swoją drogą, dziwią mnie te krzywe spojrzenia przy korzystaniu ze "starych" rozwiązań. Przecież nikt nie decyduje o tym, która technologia jest aktualnie powszechnie używana. "JavaFX" też ma swoje zalety, natomiast nie znajdziecie jej stricte w żadnej książce o Javie, ponieważ Sun Microsystems utworzyło to w postaci odrębnej biblioteki zewnętrznej. Nie wystarczy sam "JDK", aby w tym pisać. Musicie jeszcze doinstalować osobną bibliotekę i wtedy możecie dyskutować.

PIERWSZE OKNO W JAVIE

Podsumujmy to kodem źródłowym tworzące dla Was pierwsze okienko, które można będzie zamknąć tak jak inną graficzną aplikację. Spróbujcie!

  • KLASA "Main"
public class Main
{
	public static void main(String[] args)
	{
		new SwingWindow();
	}
}
  • KLASA "SwingWindow"
import javax.swing.*;

public class SwingWindow extends JFrame
{
	private JLabel label;

	public SwingWindow()
	{
		createInstances();
		addToFrame();
		configure();
	}

	private void createInstances()
	{
		label = new JLabel("Tekst typu JLabel został utworzony i dodany do okna JFrame!", SwingConstants.CENTER);
	}

	private void addToFrame()
	{
		getContentPane().add(label);
	}

	private void configure()
	{
		setTitle("Moje pierwsze okno w Swing");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setResizable(false);
		setSize(512, 256);
		setLocationRelativeTo(null);
	}
}

Swing wymaga importu biblioteki "javax.swing". Pojedyncze okno reprezentuje klasa "JFrame". Możecie spotkać wiele przykładów w których obiekt "JFrame" wykorzystuje się jako zmienną lokalną, ale ja zwykle piszę to inaczej rozszerzając klasę o "JFrame". W ten sposób, dzięki dziedziczeniu, uzyskuję bezpośredni dostęp do publicznych metod tej klasy, co widać w metodzie "configure".

Trzymajmy się kolejności. Klasa "SwingWindow" posiada jedną prywatną daną składową typu "JLabel". To jest najzwyklejszy w świecie tekst. Następnie w chwili wywołania konstruktora, wykonywana jest funkcja tworząca instancję tekstu (tekst jaki ma się wyświetlić oraz wyrównanie jako parametry), następnie ten sam tekst jest dodawany czyli "osadzany" na naszą ramkę, a na samym końcu jest przeprowadzana konfiguracja samego okna.

Swing pozwala naprawdę porządnie kontrolować wszystkie komponenty, bo zwykle z takim terminem możecie się spotkać (powodem jest nazwa klasy "Component", która stanowi klasę abstrakcyjną wszystkich graficznych rzeczy). "setTitle" ustala tytuł okna jaki widzimy na "listwie" umieszczonej na górze. "setDefaultCloseOperation" programuje zachowanie procesu co ma się stać w chwili zamknięcia tego okna. Metoda ta jest bardzo ważna bo bez tego, proces będzie "wisiał w powietrzu", nawet po zamknięciu okna "iksem". Najczęściej spotykany zapis to alias "JFrame.EXIT_ON_CLOSE".

Domyślnie, okno jest niewidoczne, zminimalizowane. "setVisible" ustawione na "prawdę" czyni go widocznym. "setResizable" ustala czy okno można rozciągać wedle własnego uznania wzdłuż i wszerz. Jeśli chcemy temu zapobiec, podajemy "false". Swing udostępnia ponadto dostosowywanie rozmiaru okna i za tym stoi wywołanie "setSize" w którym podajemy szerokość i wysokość w pikselach.

Ostatnia metoda którą wykorzystuję to jest jeszcze "setLocationRelativeTo". Dzięki wprowadzeniu do niej wartości pustej "null", po ustalonym rozmiarze, okno umieści się dokładnie na środku ekranu wyświetlacza. Po uruchomieniu powyższego programu, ujrzycie takie oto okienko:

Swing i pierwsze okno JFrame

Tak wygląda okno po skompilowaniu i uruchomieniu powyższego programu.


To tyle na samym wstępie jeśli chodzi o Swing.

PODOBNE ARTYKUŁY