Hi,
ich habe eine Tabelle, die in der ersten Spalte den Monat anzeigt. Ich möchte nun gerne diese Spalte auch sortieren können indem ich auf den den Spaltenheader klicke. Und zwar eben nicht alphabetisch sondern nach Datum. Sprich Januar, Februar, März... und anders herum Dezember, November, Oktober...
(Die Tabelle ist noch um einige Spalten größer aber die tun hier jetzt nichts zur Sache und ich versuche das Ganze so kompakt wie möglich darzulegen)
Diese Tabelle hat ein Model
Der TableEntry dazu sieht so aus
Jetzt kommen wir zu dem eigentlich Teil. Mein Rowsorter mit Comparator sieht so aus:
leider bekomme ich eine Exception
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to gui.ProtocolPanel$MonthListTableEntry
bei der letzten Zeile. Mein Comparator scheint also irgendwie einen String zu erwarten oder zu bekommen oder was auch immer.
Was mache ich also falsch?
Danke
Claus
ich habe eine Tabelle, die in der ersten Spalte den Monat anzeigt. Ich möchte nun gerne diese Spalte auch sortieren können indem ich auf den den Spaltenheader klicke. Und zwar eben nicht alphabetisch sondern nach Datum. Sprich Januar, Februar, März... und anders herum Dezember, November, Oktober...
(Die Tabelle ist noch um einige Spalten größer aber die tun hier jetzt nichts zur Sache und ich versuche das Ganze so kompakt wie möglich darzulegen)
Diese Tabelle hat ein Model
Java:
class MonthListTableModel extends AbstractTableModel
{
private ArrayList<MonthListTableEntry> list;
public MonthListTableModel(CheckYear checkYear) // (CheckYear enthält ein int mit dem Jahr und ein String[12] mit Einträgen die zu dem jeweiligen Monat gehören. Tut hier aber auch nichts zur Sache)
{
this.list=new ArrayList<MonthListTableEntry>();
for(int i=0;i<12;i++)
{
MonthListTableEntry entry=new MonthListTableEntry(i,checkYear);
this.list.add(entry);
}
}
// (hier kommen jetzt die ganzen zu implementierenden Funktionen. Sind aber für das Problem nicht relevant)
Der TableEntry dazu sieht so aus
Java:
class MonthListTableEntry
{
public String dateString;
public String month;
private int monthIndex; // (Nach dem Index möchte ich die Einträge später sortieren wenn nach der Monatsspalte sortiert werden soll)
public MonthListTableEntry(int monthIndex, CheckYear checkYear)
{
this.monthIndex=monthIndex;
this.month=formatMonth(monthIndex); // (Gibt den Monatsnamen als String zurück)
if(checkYear.checkFileName[monthIndex]!=null)
{
this.dateString="Egal";
}
else
this.dateString="<not set>";
}
}
Jetzt kommen wir zu dem eigentlich Teil. Mein Rowsorter mit Comparator sieht so aus:
Java:
this.monthListTableModel=new MonthListTableModel(this.checkList.yearList.get(0));
this.monthListTable = new JTable(this.monthListTableModel);
TableRowSorter<MonthListTableModel> rowSorter = new TableRowSorter<MonthListTableModel>(monthListTableModel);
rowSorter.setComparator(0, new Comparator<MonthListTableEntry>()
{
public int compare(MonthListTableEntry o1, MonthListTableEntry o2)
{
return o1.monthIndex-o2.monthIndex;
}
});
this.monthListTable.setRowSorter(rowSorter);
this.monthListTable.getRowSorter().toggleSortOrder(0); // <- Exception
leider bekomme ich eine Exception
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to gui.ProtocolPanel$MonthListTableEntry
bei der letzten Zeile. Mein Comparator scheint also irgendwie einen String zu erwarten oder zu bekommen oder was auch immer.
Was mache ich also falsch?
Danke
Claus