2016-04-20 18 views
1

Ich habe eine JTable, in der benutzerdefinierte Sortierung für Daten angewendet wird. Wenn die Tabelle zu Beginn gestartet wird, enthält sie nur die Spalten mit String-Daten, so dass die Sortierung in Ordnung ist. Nachdem die Tabellenstruktur geändert wurde (neue Spalten werden hinzugefügt, die eine Kombination aus Sting ("N/A") und doppelte Daten in den gleichen Spalten haben, wird der benutzerdefinierte Sortieralgorithmus entfernt. Jetzt werden die Spalten mit nur Stringdaten noch sortiert, weil mit jtable von defaultsorting, aber Spalten mit gemischten Daten gibt Classcast. gibt es ich die benutzerdefinierte Sortierung halten könnte oder erneut anwenden es, sobald tableStructureChange Ereignis.Beibehalten der benutzerdefinierten Sortierung in JTabelle nach Tabellenstruktur wird geändert

Antwort

0
public void sortTable(){ 
    TableRowSorter<TableModel> sort = new TableRowSorter<TableModel>(Jtable.getModel()); 
    Jtable.setRowSorter(sort); 

    List<RowSorter.SortKey> sortKeys = new ArrayList<>(); 
    sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING)); 
    sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); 
    sorter.setSortKeys(sortKeys); 
    } 

tritt dies ist, wie Sie tatsächlich eine JTable sortieren soll. Versuchen Sie mit diesem Code und post, wenn es Ausnahmen gibt

+0

Sortierung ist kein Problem für mich. Das Problem ist, sobald die tableStrucuture mit fireTableStructureChanged() -Methodenaufruf geändert wird, wird der ursprüngliche benutzerdefinierte Sortieralgorithmus entfernt, ich frage nach Möglichkeiten, das ursprüngliche Sortieralgo beizubehalten oder es automatisch wieder zu übernehmen, sobald die Struktur der Tabelle geändert wird. – Amit

+1

setzen Sie den Code auf die Frage. – Priyamal

0

Die Frage ist, warum das tableStructureChanged Ereignis generiert wird Dies bedeutet, dass die Spaltenstruktur der Tabelle geändert hat, so h Woher weißt du, dass die gleichen Spalten existieren werden?

Wenn Sie eine Aktualisierung der Tabelle durchführen, dann erstellen Sie einen ganz neuen TableMode. Stattdessen können Sie alle Datenzeilen aus der Tabelle entfernen (dh setRowCount (0) im DefaultTableModel verwenden) und dann die neuen Datenzeilen einfügen. Auf diese Weise wird tableStructureEvent nicht generiert.

Die andere Option besteht darin, die Sortierinformationen zu speichern und den Sortierer neu zu erstellen. Sie können die aktuellen Sortierschlüssel von DefaultRowSorter abrufen. So ist die grundlegende Logik wäre:

  1. getSortKeys()
  2. Refreshtablemodel
  3. erstellen Sie den Sortierer
  4. setSortKeys (...)

Check out: Trying to get the sorter positon to retain after a table refresh für ein Arbeitsbeispiel .

Verwandte Themen