JTable: Sortierung von Date-Objekten

hdi

Top Contributor
Hey,

ich hab nen JTable mit setAutoCreateRowSorter(true), und im TableModel die getColumnClass() Methode überschrieben, die für meine Spalte Date.class zurückgibt, sodass er die Daten auch sinnvoll sortieren kann.

Es funktioniert auch wenn der Inhalt der Spalte, d.h. die getValueAt(row, column) Methode des TableModels einfach nur die toString()-Methode von einem Date Objekt returned.

Allerdings ist diese toString() Methode so implementiert dass sie nur Tag, Monat und Jahr zurückgibt.
Ich will aber noch die Uhrzeit angezeigt haben.

Das Problem ist wenn ich jetzt ein DateFormat benutze bei der getValueAt-Methode, zB SimpleDateFormat, das auch die Uhrzeit anzeigt, dann krieg ich Exceptions beim Sortieren:

Java:
java.lang.IllegalArgumentException: Cannot format given Object as a Date

Meine Frage also folgende: Wie krieg ich es hin dass ich in der Zelle auch die Uhrzeit anzeigen kann, aber das ganze so formatiert dass dieser Default-Sorter damit klar kommt?
Muss ich mich da nur an bestimmte Regeln für mein DateFormat halten, oder führt kein Weg dran vorbei mir jetzt nen eigene RowSorter zu bauen dafür?

Ich hoffe es geht auch ohne, weil ich hab damit schlechte Erfahrungen gemacht 😀

Danke!
 
im TableModel die getColumnClass() Methode überschrieben, die für meine Spalte Date.class zurückgibt, sodass er die Daten auch sinnvoll sortieren kann.

Es funktioniert auch wenn der Inhalt der Spalte, d.h. die getValueAt(row, column) Methode des TableModels einfach nur die toString()-Methode von einem Date Objekt returned.

Das ist schonmal Blödsinn, wenn du sagst in der Spalte stehen Dates, dann hat die getValueAt Methode auch Date Objekte zurückzuliefern, sonst kannst du dir das auch sparen und direkt überall Strings verwenden.
 
Ja da hab ich mich blöd ausgedrückt: Ich return schon das Date Objekt, aber per Default ruft der TableRenderer ja die toString() Methode auf den Objekten auf, und diese Strings werden dann angezeigt, das meinte ich.

Nur das ich halt damit nix anfangen kann. D.h. also ich muss bei getColumnClass doch String.class angeben und mir nen eigenen Sorter bauen?

Ich dachte irgendwie vllt kann er implizit aus dem String n Date Objekt bauen und das dann sortieren..
 
Allerdings ist diese toString() Methode so implementiert dass sie nur Tag, Monat und Jahr zurückgibt.
Ich will aber noch die Uhrzeit angezeigt haben.
Wenn die Standardrepräsentation nicht passt, für Date-Objekte einfach einen eigenen CellRenderer schreiben.
Java:
table.setDefaultRenderer(Date.class, myDateRenderer);
In dem Renderer kannst Du dann z.B. per SimpleDateFormat das Datum entsprechend formatieren.
 
Ach ja stimmt wieso sollte ich die Daten ändern wenns mir nur um die Anzeige geht 😳
Danke!

PS: Gibts auch ne Möglichkeit den Default-Renderer für alle Tables im Programm zu setzen mit ner statischen Methode?
 

Zurück
Oben