2016-07-07 16 views
0

Ich entwickle ein kleines Spiel, das eine Highscore-Liste von einem javafx TableView angezeigt hat. Ich habe eine Unterklasse HighscoreTableView extends TableView erstellt, die ein TableView Knoten ist, der automatisch den TableColumns Knoten erstellt, den ich brauche, und ihn mit Konstruktionsdaten füllt.javafx: Tabelle standardmäßig sortieren

Ich möchte diese Tabelle nach einer Standardspalte bei der Initialisierung sortiert werden. Ich habe die folgenden Codezeilen hinzugefügt:

duration.setSortType(TableColumn.SortType.DESCENDING); 
this.getSortOrder().add(duration); 
duration.setSortable(true); 
this.sort(); 

wo Dauer ist die TableColumn, die die Sortierung definieren sollte. Natürlich ist es der TableView hinzugefügt. Aber wenn ich eine neue Instanz von HighscoreTableView erstelle, bleibt sie standardmäßig unsortiert, bis der Benutzer auf einen der Spaltenköpfe klickt. Dies ist unerwartet, da this question, this question und this question sagen, dass es so funktionieren sollte. Irgendwelche Ideen?

Weitere Informationen für die Wiedergabe: Die HighscoreTableView Klasse durch eine HighscoreStage extends Stage Klasse verwendet wird, die eine TabPane mit vier Tabs enthält. Jede Registerkarte enthält eine HighscoreTableView mit verschiedenen Daten aus einem statischen Data Objekt. Das Datenmodell ist eine Klasse HighscoreEntry, eine ObservableList von ihnen wird hinzugefügt, um die HighscoreTableView s. Mein vollständiger Code ist verfügbar here.

+0

Ich glaube, für die Sortierung zu funktionieren, muss die Liste in der 'Items' -Eigenschaft der TableView eine' SortedList' mit der 'comparator' -Eigenschaft sein, die an die von TableView gebunden ist. Dies ist vermutlich der Anfangswert, aber Sie setzen ihn zurück. Versuchen Sie 'this.setItems (list.getObservableList());' in 'this.getItems(). Clear;' gefolgt von 'this.getItems(). AddAll (list);' – Itai

Antwort

2

Sie rufen sort() an, bevor Daten geladen werden. Stattdessen sollten Sie es jedes Mal aufrufen, nachdem Sie Daten zur Tabellenansicht hinzugefügt/geändert haben. Sie können auch SortedList mit einem entsprechenden Komparator verwenden, um die ursprüngliche Sicherungsliste zu umbrechen. Dann werden alle Änderungen automatisch zur Ansicht weitergeleitet.

+0

Danke, das hat es geschafft! – LukeLR