Aufgabe 2020-12-21 — JavaFX Tabs 1
1. Überblick und Gesamtstruktur
Zu erstellen ist eine JavaFX-App, die als Root-Pane eine BorderPane verwendet.
Im deren top
-Bereich ist in Zukunft Platz für das Menü und Icon-Leiste, im bottom
-Bereich kann beispielsweise eine Statusleiste Platz finden.
Im center
-Bereich liegt eine Tab-Pane, in der wir vorerst kleine "Experimente" unterbringen.
Die Implementation der einzelnen Tabs erfolgt durch Erstellen jeweils einer eigenen Subklasse von javafx.scene.control.Tab
.
3. Erstellen eines Login-Formulars
Eine SortedMap wird als Username-Passwort-Speicher verwendet (Key ist der Username, Value das Passwort). Damit ist einerseits Eindeutigkeit sichergestellt und andererseits kann leicht eine geordnete Liste der Usernamen produziert werden.
Vorerst ist der Map-Inhalt festgelegt und dient nur zum Prüfen, ob der Login gültig ist.
Das GUI besteht aus 2 TextField Elementen mit dazugehörigen Labels, einem Button, mit dem die enutzerdaten überprüft werden. Weiters ist ein Status-Text (als Label) vorzusehen, in dem die Erfolgs- oder Fehlschlag-Meldung ausgegeben wird.
4. Ergänzen des Konzepts mit Benutzer-Registrierung
In einen weiteren Tab ist eine Liste aller bisher registerierten Usernamen in einem
javafx.scene.control.TextArea
(siehe z.B. in
Jenkov: JavaFX TextArea) anzuzeigen.
Weiters sind ähnlich zum Login-Formular 3 Textfelder samt Labels vorzusehen, in denen ein neuer User samt doppelter Passworteingabe registriert werden kann.
Bei Nicht-Übereinstimmung des Passworts ist nach drücken des Speicher-Buttons eine Fehlermeldung auszugeben. Wenn der Username leer war, ist ebenfalls eine Fehlermeldung auszugeben.
Wenn der Username bereits vergeben ist, soll ebenfalls eine Fehlermeldung ausgegeben werden (Änderung eines bestehenden Users bzw. dessen Passwortes ist derzeit noch nicht möglich)
Gespeichert darf nur dann werden, wenn ein nicht-leerer Username vorliegt sowie die Passworte nicht leer sind und übereinstimmen.
Da die User-Map die selbe wie im ersten Karteireiter sein muss, damit die neu registrierten User dort verfügbar sind, müssen wir überlegen, wo diese User-map abgelegt wird:
Vorerst werden wir das in der Main-Klasse tun und darin die nötigen Zugriffsmethoden für die Map implementieren. Später werden wir eine strukturelle Trennung zwischen den Daten und dem UI vornehmen.
Damit die beiden Tab-Subklassen "wissen", wie sie die Main-Klasse (v.a. die darin befindlichen Methoden) ansprechen, muss der Konstruktor der beiden Subklassen als Parameter das (Singleton-)Objekt der Main-Klasse als Parameter erhalten.
5. Erste Versuche mit Listen im UI
Die Ausgabe der bestehenden User in einer TextArea ist etws unbefriedigend, da so keine Benutzer ausgewählt werden können, deren Passwort geändert werden soll. Daher erstellen wir einen dritten Tab (wieder als Subklasse), in dem wir erste Experimente mit Listen durchführen - v.a. das Arbeiten mit Selektionen.