Hier folgt ein einfacher Teil von JavaFX Code, um meine Frage zu illustrieren.JavaFX - Observable Collections in den Datenmodellklassen
List list1 = new ArrayList();
list1.add("foo");
...
someListView = new ListView<>();
ObservableList someObservableList = FXCollections.observableList(list1);
someListView.setItems(someObservableList);
...
someObservableList.add("bar");
Wenn ich das richtig verstanden, nach der setItems
Methode aufrufen, wird nicht nur der Inhalt der Liste in der ListView
Gui Komponente gezeigt werden, sondern auch, wenn Elemente in die ObservableList
Instanz nachträglich hinzugefügt werden, wird die ListView
sein wird automatisch aktualisiert und zeigt die neu hinzugefügten Objekte automatisch an, ohne dass zusätzliche Methoden add
oder refresh
aufgerufen werden müssen.
So weit, so gut. Aber was, wenn ich etwas zur ursprünglichen Liste hinzufüge (d. H. list1
). Diese Änderungen werden nicht automatisch weitergegeben. Es macht durchaus Sinn, aber manchmal ist es unbequem. In einer klassischen Java-Anwendung besteht das Modell der Anwendung natürlich nicht aus ObservableCollection
Instanz. Wenn Sie also dem Modell etwas hinzufügen, müssen Sie immer die ObservableLists
Instanzen aktualisieren, die von der ursprünglichen Liste abgeleitet wurden. Anscheinend ist das unvermeidlich, oder? Diese
hat mich gefragt, ist es eine kluge Idee Collection
Typ Vorkommen (z List
, Collection
, Set
, Iterable
, ...) in den Modellklassen und ersetzen sie durch ihre ObservableCollection
Alternativen ab sofort zu ändern?
Bis jetzt dachte ich immer, dass diese ObservableCollection
Klassen nur in der Gui Schicht der Anwendung verwendet werden sollten, aber es scheint ziemlich praktisch zu sein, sie überall zu verwenden.
Auch die Verwendung der JavaFX-Observablen in Ihrem Modell fügt eine unmittelbare Abhängigkeit von jfxrt.jar hinzu, die zu Problemen führen kann, wenn das Modell für andere Nicht-JavaFX-Projekte freigegeben wird. – OttPrime