Guten Morgen an alle.
Ich habe ein kleines Problem mit der Sortierung einer JTable. Ich verwende ein eigenes TableModel, wo ich die Daten wie folgt vorhalte:
Jetzt könnte man behaupten, dass die Art und Weise mit der ich die Daten vorhalte, ungewöhnlich erscheint. Diese Vorgehensweise ermöglicht es mir aber, unabhängig vom Inhalt der Daten, die Spaltensortierung zu ändern und nur ein Model für jede Art eines Datenformates zu verwenden. Ich habe ein columns object, dass über einen Enum die möglichen Bestandteile einer Tabelle beschreibt. Durch den Spaltenindex kann ich dann die jeweiligen Daten aus meinem C value des Models herausziehen und an den Renderer übergeben.
Leider scheint der Rowsorter damit nicht klarzukommen. Ich vermute, dass er die Werte aus getValueAt(); zum Vergleich heranzieht. Er bekommt jedoch das gewünschte Objekt und den dafür passenden Comparator beim erzeugen der Objekte:
Jedoch passiert rein gar nichts - auch keine Fehler. Selbst wenn ich den Comparator nicht setze, sollte er ja die Objekte aus der List<C> in einen String umwandeln und die Tabelle nach dieser Reihenfolge sortieren, was jedoch auch nicht passiert. Habe ich etwas essentielles übersehen?!
Herzlichen Dank für eure Hilfe.
LG
tuedel
Ich habe ein kleines Problem mit der Sortierung einer JTable. Ich verwende ein eigenes TableModel, wo ich die Daten wie folgt vorhalte:
Java:
private List<C> rowData = CollectionFactory.newList();
private Integer columnCount;
public LBoardTableModel(int columnCount) {
this.columnCount = columnCount;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return rowData.get(rowIndex);
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//
}
public void setValue(C aValue, int rowIndex, int columnIndex) {
rowData.set(rowIndex, aValue);
fireTableCellUpdated(rowIndex, columnIndex);
}
@Override
public int getRowCount() {
return rowData.size();
}
@Override
public int getColumnCount() {
return columnCount;
}
}
Jetzt könnte man behaupten, dass die Art und Weise mit der ich die Daten vorhalte, ungewöhnlich erscheint. Diese Vorgehensweise ermöglicht es mir aber, unabhängig vom Inhalt der Daten, die Spaltensortierung zu ändern und nur ein Model für jede Art eines Datenformates zu verwenden. Ich habe ein columns object, dass über einen Enum die möglichen Bestandteile einer Tabelle beschreibt. Durch den Spaltenindex kann ich dann die jeweiligen Daten aus meinem C value des Models herausziehen und an den Renderer übergeben.
Leider scheint der Rowsorter damit nicht klarzukommen. Ich vermute, dass er die Werte aus getValueAt(); zum Vergleich heranzieht. Er bekommt jedoch das gewünschte Objekt und den dafür passenden Comparator beim erzeugen der Objekte:
Java:
columns = new Object[]{
LBoardColumnValues.NUMBER,
LBoardColumnValues.PRED_RANK,
LBoardColumnValues.NET_POINTS,
LBoardColumnValues.TOTALPOINTS,
LBoardColumnValues.COLOR};
tableHeader = new EntryTableHeader(columns);
tableModel = new LBoardTableModel(columns.length);
table.setModel(tableModel);
rowSorter = new TableRowSorter<LBoardTableModel>(tableModel);
rowSorter.setComparator(0, Comparators.getPredictiveRankComparator());
rowSorter.setSortsOnUpdates(true);
rowSorter.sort();
table.setRowSorter(rowSorter);
renderer = new LBoardRenderer(columns);
table.setDefaultRenderer(Object.class, renderer);
Jedoch passiert rein gar nichts - auch keine Fehler. Selbst wenn ich den Comparator nicht setze, sollte er ja die Objekte aus der List<C> in einen String umwandeln und die Tabelle nach dieser Reihenfolge sortieren, was jedoch auch nicht passiert. Habe ich etwas essentielles übersehen?!
Herzlichen Dank für eure Hilfe.
LG
tuedel