Celem laboratorium było stworzenie aplikacji graficznej w języku Java z wykorzystaniem JavaFX, umożliwiającej podstawową obróbkę graficzną obrazów z wykorzystaniem przetwarzania równoległego. Zadanie miało na celu połączenie wiedzy z zakresu projektowania GUI, operacji na obrazach oraz programowania współbieżnego.
Projekt zaimplementował pełny zestaw funkcji zgodnych z wymaganiami zawartymi w historjach użytkownika:
- Ekran startowy z nazwą aplikacji, logo PWr i tekstem powitalnym.
- Widok umożliwiający wybór operacji z listy rozwijanej.
- Przycisk „Wykonaj” z walidacją braku wyboru operacji.
- Widok oryginalnego oraz przetworzonego obrazu.
- Widoczna stopka z danymi autora.
- Wczytywanie tylko plików
.jpgprzez systemowy selektor plików. - Komunikaty o sukcesie, błędach formatu i niepowodzeniach wczytania.
- Usuwanie poprzednich obrazów i ich kopii przy ponownym wczytaniu.
- Okno modalne z możliwością nadania nazwy plikowi.
- Walidacja długości nazwy (3–100 znaków).
- Obsługa kolizji nazw (plik istnieje).
- Zapis do folderu systemowego „Obrazy” w formacie
.jpg.
- Skalowanie: okno modalne z wpisywaniem szerokości/wysokości.
- Obrót: dwa przyciski (90° w lewo/prawo).
- Negatyw: opcja w liście, wykonanie na kopii obrazu.
- Progowanie: okno modalne z wartością progu (0–255).
- Konturowanie: automatyczna operacja na kopii obrazu.
- Operacje: negatyw, progowanie i konturowanie zrealizowane z użyciem do 4 wątków.
- Logowanie do pliku
applog.txtz czasem, poziomem i opisem akcji:- Start i zamknięcie aplikacji.
- Błędy i działania użytkownika.
- Wymagania:
- Java 17+
- Maven 3.6+
- Sposób uruchomienia:
./mvnw javafx:run
lub w IDE (np. IntelliJ IDEA) uruchom HelloApplication.java jako aplikację JavaFX.
Java_fx1/
├── src/
│ └── main/
│ ├── java/
│ │ └── org/example/java_fx1/
│ │ ├── HelloApplication.java
│ │ └── HelloController.java
│ └── resources/
│ └── org/example/java_fx1/
│ ├── hello-view.fxml
│ └── logo/logo.png
├── applog.txt
├── pom.xml
├── result_*.png
- Java 17
- JavaFX 19
- FXML – definicja layoutu GUI
- Maven – zarządzanie projektem i zależnościami
- Multithreading (ExecutorService) – optymalizacja wydajności
- Logowanie (Logger) – rejestrowanie zdarzeń w pliku tekstowym
- Projekt zrealizowany zgodnie z wymaganiami zadania laboratoryjnego. Aplikacja spełnia wszystkie kryteria akceptacji z historii użytkownika:
- Posiada przejrzysty interfejs,
- Obsługuje poprawnie wczytywanie i zapis obrazów,
- Implementuje 4 operacje przetwarzania graficznego,
- Zoptymalizowano czas ich działania poprzez zastosowanie wielowątkowości,
- Aplikacja jest odporna na błędy i posiada system logowania.
- Rozwiązanie pokazało znaczenie planowania struktury aplikacji, projektowania UX oraz bezpiecznego przetwarzania danych wejściowych. Laboratorium stanowiło wartościowy przykład zastosowania wiedzy z różnych obszarów Javy w praktyce.
Autor: Piotr Kosior