© Excellent backgrounds/Shutterstock.com
JavaFX-Komponenten mit Scala Traits erweitern

FX Traits


Die Formulierung „Traits sind die Scala-Ver­sion von Java Interfaces“ stellt eine ziemliche ­Untertreibung dar, bieten Traits doch wesentlich reichere Gestaltungs­möglichkeiten als ihre Java-Cousins. Der folgende Beitrag demonstriert die Mächtigkeit von Traits an einem konkreten Beispiel: dem Nachrüsten fehlender Funktionalität von JavaFX-Textkomponenten quer zur Vererbungshierarchie.

HTML5 und JavaFX

JavaFX etabliert sich als ernst zu nehmende Alternative für die Erstellung optisch anspruchsvoller und komfortabler Benutzeroberflächen. Das Programmiermodell ist für Entwickler mit Erfahrung in Swing nicht allzu schwer zu erlernen, es stehen umfangreiche CSS-basierte Layoutmöglichkeiten zur Verfügung, und die enthaltenen Animationen und Effekte erlauben es dem UI-Designer, seiner Kreativität freien Lauf zu lassen. Nehmen wir also an, aufgrund dieser Vorteile soll die Oberfläche einer datenzentrischen Anwendung mittels JavaFX realisiert werden. Der Benutzer erhält diverse Eingabemasken bestehend aus Textfeldern, Textareas und anderen Standardkomponenten. Die getätigten Eingaben werden an den Server geschickt und in einer relationalen Datenbank gespeichert.

Das Problem

Natürlich muss vor der Speicherung der Daten eine Validierung durchgeführt werden. Beispielsweise finden sich im Datenmodell häufig Restriktionen für die Länge einzelner Spalten, oder die Programmlogik verlangt, dass manche Eingabefelder nur bestimmte Zeichen oder keine Sonderzeichen enthalten. Im Sinne der Usability wäre es vorteilhaft, wenn die Eingabekomponenten in der Anwendung derartige Einschränkungen direkt unterstützen, also die Eingabe fehlerhafter Daten gar nicht erst ermöglichen würden; wenn für die Spalte „Benutzername“ in der Datenbank nur fünfzig Zeichen vorgesehen sind, sollte das entsprechende Textfeld keine längeren Eingaben akzeptieren.

In der aktuellen Version von JavaFX gibt es für Textkomponenten keine Eigenschaft zur Festlegung der maximalen Textlänge, und auch eine Beschränkung auf nur bestimmte Zeichen wird nicht direkt unterstützt. Die Situation ist ähnlich wie beim Vorgänger Swing, doch konnte man sich dort aufgrund der konsequenten Nutzung des Model-View-Controller-Paradigmas noch recht elegant aus der Bredouille helfen: Durch die Erstellung einer eigenen Modellklasse, eines so genannten Documents, ließen sich beliebige Restriktionen realisieren und auf unterschiedliche Textkomponenten (einzeilige und mehrzeilige Texte, die als unterschiedliche Klassen realisiert ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang