2.1.1. JavaFX mit NeitzelLib
Das Modul fx lädt FXML und verbindet Controls mit den Attributen eines gewöhnlichen Java-Models. Die Bibliothek erzeugt dazu ein ViewModel mit JavaFX-Properties. Controller übernehmen Ereignisse, Converter passen Werte an, und Components kapseln wiederverwendbare Teilansichten.
| Kapitel | Inhalt |
|---|---|
| Schnellstart | Vollständiges neues Maven-Projekt |
| Architektur und MVVM | Zuständigkeiten, Ladeablauf, Identität und Lebensdauer |
| Models und Bindings | Attribute, Pfade, Richtungen, Converter und Computed |
| Components und Collections | Teilansichten, Repeat, Auswahl und Table |
| Nachrichten und UI-Helfer | Message, IntegerSpinners und TraySupport |
| Generierte ViewModels | Typisierte Zugriffe und Default-Registrierung |
| Referenzanwendung | Person Desk aus fx-example |
| Fehlersuche | Build, FXML, Injection, Module und Laufzeitgrenzen |
Die folgende Tabelle beschreibt den untersuchten Quellstand. Sie ist keine Zusage für beliebige neuere Versionen.
| Bestandteil | Version beziehungsweise Beziehung | Aufgabe der Anwendung |
|---|---|---|
| JDK | Java 21 | Passendes JDK für Build und Start wählen |
| Maven | Ab 3.8.6, Wrapper 3.9.11 | Wrapper oder lokale Installation verwenden |
| Bibliothek | de.neitzel.lib:fx:1.0-SNAPSHOT |
Lokale Artefakte zunächst bauen und installieren |
| Eigene Module | fx benötigt core und injection |
Maven löst sie transitiv auf |
| JavaFX | 21.0.7, base/graphics/controls/fxml/web | Plattformabhängige native Artefakte bei der Auslieferung berücksichtigen |
| Paketscan | Reflections 0.10.2 | Kommt über injection |
| Injection-Annotationen | jakarta.inject-api 2.0.1 |
Jakarta- statt javax.inject-Annotationen verwenden |
| Logging | SLF4J API 2.0.17 | Ein Backend wählen; das Beispiel nutzt slf4j-simple 2.0.17 |
| Bibliotheks-Build | Unter anderem Lombok 1.18.42 | Für gewöhnlichen Anwendungscode nicht erforderlich |
| Designer-Werkzeuge | Optionales Preview-API und Model-Processor | Nur für den gewählten Designer-Ablauf hinzufügen |
Ein Projekt benötigt zunächst nur die fx-Dependency und gegebenenfalls ein Logging-Backend. Generierte ViewModels, Scene Builder Kit und Designer sind keine Voraussetzung für ViewLoader.
| Aufgabe | Einstiegspunkte |
|---|---|
| Laden | ViewLoader.load, LoadedView.getRoot, getViewModel, property |
| Präsentationszustand | ViewModel.property, geschütztes storedProperty, HasViewModel, @ViewModelClass |
| FXML-Deklarationen | BindingList, DirectBinding, ComputedBinding, Repeat |
| Umwandlung | Converter.toControlValue, toAttributeValue |
| Tabelle | Table mit collection/row/columns/selection, Column mit header/attribute/width |
| Nachrichten | Message, Message.Severity, ViewModel.addMessage, getMessages, getLatestMessage, MessagePopup |
| Generierte Defaults | ViewModelRegistry, ViewModelRegistration, ViewModelRegistrations, ViewModelDefaults.select |
| Unabhängige Helfer | IntegerSpinners.nonNegative, TraySupport, Backend, Registration |
Interne Loader, Binding-Applier und Identitäts-Caches sind keine Erweiterungs-API. Die Bibliothek bleibt eine Entwicklungssammlung; insbesondere sind Lebensdauer und Threading bei größeren Anwendungen bewusst zu planen.