Celem laboratorum jest zapoznanie się z frameworkiem JavaFX, służącym do budowy aplikacji okienkowej.
Treść laboratorium powstała we współpracy z Norbertem Morawskim.
- JavaFX to framework do obsługi środowiska graficznego.
- Aplikacja JavaFX składa się z:
Stage- okno aplikacji,Scene- aktualna zawartość aplikacji (np. ekran symulacji, ekran podsumowania)- Scena zawiera wiele instancji
Node. Są nimi m.in. przyciski, pola tekstowe, kontenery (VBox,HBox,GridPane, itp.).
- Główna klasa w aplikacji powinna dziedziczyć po
Applicationi implementować metodęstart(). - Minimalna aplikacja powinna stworzyć jedną scenę, przypiąć ją do
Stagei wyświetlić.
- W
build.gradle:- Dodaj
id 'org.openjfx.javafxplugin' version '0.0.10'do sekcjiplugins. - Dodaj pod
repositoriessekcję:javafx { version = "17" modules = [ 'javafx.controls' ] }
- Dodaj
- Utwórz nowy pakiet
agh.ics.oop.gui. - Odśwież konfigurację Gradle'a (
Ctrl+Shift+O). - Utwórz klasę
Appdziedziczącą zApplicationz pakietujavafx.application. - Zaimplementuj metodę
public void start(Stage primaryStage).- Będzie to metoda uruchamiająca interfejs graficzny Twojej aplikacji.
- Na razie możesz w ciele metody wpisać
primaryStage.show();. Wyświelti to puste okno aplikacji.
- W metodzie
mainwWorlddodajApplication.launch(App.class, args);- Spowoduje to uruchomienie okna JavaFX.
- Zobacz czy okno pokazuje się (może być nieresponsywne, ale powinno się pokazać).
Pamiętaj, żeby importować brakujące klasy z pakietu
javafx
- W klasie
Appdodaj:Spowoduje to:Label label = new Label("Zwierzak"); Scene scene = new Scene(label, 400, 400); primaryStage.setScene(scene); primaryStage.show();
- Utworzenie nowej etykiety z treścią
Zwierzak. - Utworzenie sceny zawierającej tylko obiekt
Label, z wymiarami 400 x 400 pikseli. - Ustawienie sceny jako aktywnej.
- Pokazanie okna aplikacji.
- Utworzenie nowej etykiety z treścią
- Zmodyfikuj kod tak, aby zamiast pojedynczej etykiety wyświetlał siatkę z etykietami.
- Wskazówka: Skorzystaj z klasy
GridPane. Przydatne może być ustawieniegrid.setGridLinesVisible(true);.
- Wskazówka: Skorzystaj z klasy
- Przenieś kod inicjalizacyjny mapy z klasy
WorlddoApp(możesz skorzystać z metodyinit()). - Użyj
getParameters().getRaw()żeby odczytać parametry linii komend. - Wykorzystaj
AbstractWorldMap, tak aby siatka odpowiadała rozmiarom i orientacji mapy. Pamiętaj, że współrzędneyrosną w kierunku "do góry", wGridPanejest na odwrót. - Dodaj w pierwszej kolumnie i w pierwszym rzędzie wartości współrzędnych (podobnie jak robi to
MapVisualizer). - Do pozostałych wierszy dodaj obiekty z mapy.
- Dodaj do siatki rozmiary kolumn i wierszy. Skorzystaj z:
grid.getColumnConstraints().add(new ColumnConstraints(width));grid.getRowConstraints().add(new RowConstraints(height));
- Wyśrodkuj etykiety korzystając z wywołania
GridPane.setHalignment(label, HPos.CENTER). - Aktualnie, twój program powinien wyglądać mniej więcej tak (użyto mapy
GrassField, dodano 2 zwierzaki):
