2016-03-23 4 views
-1

Ich entwickle einige Messenger mit JavaFX, nur um mehr mit dieser Technologie vertraut zu machen.Wie beobachtet man die Eigenschaften der Objekte in ObservableList

Contact hat zwei Haupteigenschaften: User und zuletzt Message.

brauche ich

  1. Liste der Kontakte mit neuesten Nachrichten
  2. Kontaktliste nach Namen sortiert anzuzeigen

ich zwei Lösungen kamen bisher

Erste Lösung ist Contact unveränderlich zu machen. Daher ist es erforderlich, den Kontakt jedes Mal zu ersetzen, wenn eine neue Nachricht ankommt oder sich die Benutzerinformationen ändern. Es funktioniert, aber Kontakt blinkt in ListView auf Update.

Zweite Lösung ist ObjectProperty zu verwenden:

public class Contact { 
    private final ObjectProperty<User> user = ...; 
    private final ObjectProperty<Message> lastMessage = ...; 
} 

In diesem Fall hat ich benutzerdefinierten ObservableList erstellen hinzufügen/entfernen Hörer Contact ‚s Eigenschaften, wenn Contact hinzugefügt wird/entfernt/aus der Liste. Dies ist erforderlich, da beide Listen automatisch sortiert werden sollten.

So haben beide Lösungen Nachteile.

Bitte geben Sie Ihre Empfehlungen, wie Sie mein Ziel erreichen.

+0

Mögliche Duplikate von [Java 8 SortedList TableView nicht erfrischend] (http://stackoverflow.com/questions/21171948/java-8-sortedlist-tableview-not-refreshing) – kleopatra

+0

ja, es ist - absolut ein sehr ähnliches Problem mit genau dem gleichen Mittel ;-) – kleopatra

Antwort

2

In der FXCollections Klasse gibt es eine Methode, die ein „Extraktor“ Funktion verwendet die Liste mitzuteilen, welche Eigenschaften der Listenelemente sollten Liste Änderungsereignisse ausgelöst:

https://docs.oracle.com/javase/8/javafx/api/javafx/collections/FXCollections.html#observableArrayList-javafx.util.Callback-

Diese Sie geben die Der gleiche Ansatz wie Ihre zweite Lösung, aber ohne dass Sie den Code schreiben müssen, um die Listener selbst zu verwalten.

+0

Danke! Ich habe diese Methode und Extraktoren irgendwie vermisst. –