Wenn Sie die Sortierfunktionen Ihrer TableColumn beibehalten möchten, ist keine der obigen Lösungen gültig: wenn Sie Ihr Date in einen String konvertieren und es in Ihrer TableView anzeigen; Die Tabelle wird es so (so falsch) sortieren.
Die Lösung, die ich gefunden habe, war das Unterklassifizieren der Date-Klasse, um die toString () -Methode zu überschreiben. Allerdings gibt es hier eine Einschränkung: Die TableView verwendet java.sql.Date anstelle von java.util.Date; also müssen Sie die vorherige unterklassifizieren.
%Vor%Die Tabelle ruft diese Methode auf, um das Datum zu drucken.
Natürlich müssen Sie auch Ihre Date-Klasse in der TableColumn-Deklaration in die neue Unterklasse ändern:
%Vor%Das gleiche gilt, wenn Sie Ihr Objektattribut an die Spalte Ihrer Tabelle anhängen:
%Vor%Und schließlich, um die Klarheit zu schärfen, deklarieren Sie den Getter in Ihrer Objektklasse:
%Vor%Es hat eine Weile gedauert, das herauszufinden, weil es java.sql.Date hinter den Kulissen verwendet; also hoffentlich wird dies anderen Menschen einige Zeit ersparen!
Update für Java FX8:
(Ich bin mir nicht sicher, ob es der richtige Ort für diese Antwort ist, aber ich bekomme das Problem in JavaFX8 und einige Dinge haben sich geändert, wie java.time package)
Einige Unterschiede zu den vorherigen Antworten: Ich halte den Datumstyp in der Spalte, also muss ich sowohl cellValueFactory als auch cellFactory verwenden. I Erstellen Sie eine generische wiederverwendbare Methode zum Generieren der cellFactory für alle Datumsspalten. Ich benutze Java 8 Datum für java.time Paket! Aber die Methode konnte für java.util.date leicht neu implementiert werden.
%Vor%Die Vorteile sind:
Eine universelle Lösung könnte so einfach sein:
%Vor%Und seine Beispielverwendung:
%Vor%Sie können Eigenschaften verschiedener Typen problemlos pipen und einen Formatierer oder Konverter zwischenschalten.
%Vor%