Nutzt ihr Properties und Bindings in JavaFX und wenn ja für was?

... komplette Frage anzeigen

2 Antworten

Properties sind eine sehr sehr gute Sache in JavaFX, und sie machen einem extrem das Leben leicht. - Ich habe mich voll umfänglich bereits daran gewöhnt und kann gar nicht mehr ohne.

Deine Frage ist ja eher, in welcher Situation. Daher nenne ich mal ein paar Beispiele:

An Properties kann man Changelistener anhängen. In der Swing-Welt war das immer abhängig von einer Komponente. Jedoch der gewaltige Vorteil: Es ist dann einfach eine Variable und keine Komponente, an welcher der Listener hängt. 

Diesen Vorteil hat man, wenn man eigene Controls programmiert, da du hier Strikt zwischen Style-Element und Control-Funktionalitäten entscheiden kannst, wodurch du beispielsweise mehrere mögliche Optische Styles für das selbe Control zulassen kannst.

Die andere Sache sind z.B.: Bindings bei Properties, hierbei gibt es eine gewaltige Menge an Anwendungsbeispielen.

Ich mal es mal Konkreter, folgende Aufgabenstellung: 

Deine GUI repräsentiert eine Adress-Eingabe mit Folgenden Feldern "Name, Straße, PLZ Ort".

Dann hast du eine Checkbox, "Alternative Lieferadresse" und nochmal dieselben Felder.

Und nun möchtest du aber, dass die neuen Felder nicht editierbar sind, wenn die Checkbox nicht selektiert ist.

Und genau hier, ersparst du dir eine Menge Code. Bevor du jetzt mit Listenern anfangen musst, machst du daraus jetzt einen Einzeiler:

txtName.disableProperty().bind(checkbox.selectedProperty().not());

Das ist auch in Kombination mit mehreren Properties möglich.

Da so gut wie alle Controls Properties haben, ist der Vielfalt der Anwendungsmöglichkeiten keine Grenze gesetzt.

Es gibt beispielsweise Controls bei denen das ganze noch viel mehr Sinn macht: Nämlich Diese, die in Swing extra Renderer gebraucht haben. 

Wer schon einmal eine JTable mit einem Umfassenden TableModel ausgestattet hat, mit voller Funktionalität, inklusive Tooltips, und Renderern, Editoren für eigene Spalten, der kennt die kleine "Hölle": Renderer werden unendlich oft aufgerufen, Der Editor funkt manchmal dazwischen, getValueAt wird unperformant oft aufgerufen, etc...

Wenn man aber nun einem Tableview eine ObservableList mit Bean-Objekten überreicht, welche Properties haben, erspart man sich genau diesen Mist. - Ändert man die Property im Beanobjekt, so wird der Tableview aktualisiert. 

Persönlich bin ich total überzeugt davon, da es für mich den Code letztendlich viel sauberer hält.

Antwort bewerten Vielen Dank für Deine Bewertung

Hallo,

ein Beispiel für die Nutzung von Properties ist die Darstellung der Uhrzeit auf einem Display. Es gibt außerhalb des Displays ein Objekt "Uhr", welches fortwährend aktualisiert wird. Wenn dieses Objekt nun (z.B.) ein öffentliches StringProperty hat, welches die aktuelle Uhrzeit enthält, dann kann ich das TextProperty eines FX-Labels daran binden. Somit habe ich auf der GUI-Seite nur eine Zeile Code und sehe immer die aktuelle Uhrzeit.
Anderes Beispiel: Du möchtest, dass ein Fahrzeug auf einer Karte angezeigt wird mit einem GPS-Empfänger als Datenquelle. Einfach gesprochen hast Du ein Objekt "Fahrzeug", dass regelmäßig die Quelle - den GPS-Empfänger - nach der aktuellen Position fragt. Die aktuelle Position wird in Properties des Objekts gespeichert. Soll nun die Position des Fahrzeugs als Punkt (Kreis) dargestellt werden, verbindest Du die x- bzw. y-Properties des Kreises mit den entsprechenden Properties des Objekts "Fahrzeug" - und schon wird die Bewegung abgebildet.
Ein drittes Beispiel: Kundendaten aus einer Datenbank darstellen. Kundendaten aus einer DB werden auf ein Objekt "Kunde" gemapped, d.h. in entsprechenden Properties gespeichert. Werden nun die Properties einer grafischen Oberfläche mit den Properties des Objekts "Kunde" verbunden, kann man sehen, wenn es Aktualisierungen auf der Datenbankseite gab. Oder anders herum: die grafische Oberfläche braucht sich nicht um die Aktualisierung zu kümmern und muss die DB nicht einmal kennen.

Also: Properties haben sehr viele Vorteile - einfach einmal ausprobieren. Und wenn Fragen auftauchen - immer fragen!

Viele Grüße!

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?