FHNW-OOP2 / chargingstationsfx-fs19-remo-vonarx

chargingstationsfx-fs19-remo-vonarx created by GitHub Classroom
0 stars 0 forks source link

Bindings #2

Closed remo-vonarx closed 5 years ago

remo-vonarx commented 5 years ago

Grüezi Herr Holz

Das GUI habe ich mal umgesetzt, Daten aus dem CSV werden nun in der Table angezeigt. Jetzt möchte ich bei einem Klick-Event (CsTableViewClickEvent), die ausgewählte TableRow (ChargingStation) im CsDetailHeaderPaneanzeigen.

Dafür habe ich im ChargingStationPresentationModelein entsprechendes Property erstellt, welches bei einem Klick-Event aktualisiert wird. Soweit funktioniert alles - doch wie muss ich die Bindings erstellen, damit im CsDetailHeaderPane bspw. das Label für die Adresse aktualisiert wird?

Ich habe in der setupBindings-Methode ein bidirectional-Binding vom Address-Label auf das StringProperty-Gegenstück von der ChargingStationPropertygesetzt. Jedoch scheint dies nicht zu funktionieren.

Was mache ich falsch? Oder habe ich etwas missverstanden?

Ich wäre Ihnen sehr dankbar für ein rasches Feedback. Freundliche Grüsse

Remo von Arx

DieterHolz commented 5 years ago

Das sieht ja schon ganz gut aus. Auch wenn Sie an einigen Stellen durchaus unübliche Wege gegangen sind, z.B. beim CsTableViewClickEvent anstatt einer einfachen Lambda-Expression.

Auch sollten Sie den Hinweisen von IntelliJ mehr Beachtung schenken. Vor allem wenn etwas gelb hinterlegt ist.

Aber zur Frage: Das Thema werden wir ausführlich im nächsten Unterricht besprechen.

Die Grundüberlegung ist die: Die aktuelle Ladestation ändert sich ja laufend. Daher muss das Binding auch immer wieder angepasst werden. Es reicht nicht das Binding initial zu setzen, so wie Sie das im CsDetailHeaderPane in setupBindings machen.

Statt dessen muss jedes mal wenn sich die chargingStationProperty in ChargingStationPresentationModel ändert, das Binding angepasst werden. Das sieht dann z.B. so aus:

@Override
public void setupValueChangedListeners() {
    csPM.getChargingStationProperty().addListener((observable, oldValue, newValue) -> {
        lblAddress.textProperty().bind(newValue.getAddress() );
    });
}

Warum halten Sie sich nicht an die Nameskonventionen für die Zugriffsmethoden auf eine Property? Normalerweise heisst die Methode chargingStationProperty.

Da es sich um ein Label handelt, reicht ein unidirektionales Binding.

Das zeigt wie gesagt nur die Grundidee. Nächsten Dienstag gehen wir noch ein, zwei Schritte weiter.

remo-vonarx commented 5 years ago

Besten Dank für Ihr Feedback und Hinweise, werde das so einfliessen lassen. Besteht die Möglichkeit die Unterlagen zu den nächsten Lektionen bereits ins AD hochzuladen? Wäre super, weil die kommenden Wochen voll gepackt mit diversen anderen Projektabgaben und Prüfungen sind. So könnte man im Allgemeinen besser vorausarbeiten und die Arbeit besser verteilen.

DieterHolz commented 5 years ago

Unterlagen sind jetzt auf dem AD