/ / garder la personnalisation Tri dans jtable après modification de la structure de la table - java, swing, tri, jtable, rowsorter

garder la personnalisation Tri dans jtable après modification de la structure de la table - java, swing, tri, jtable, rowsorter

J'ai une table où le tri personnalisé est appliquépour les données. Lors du lancement initial de la table, les colonnes contenant uniquement des données String sont disponibles, ce qui facilite le tri. Une fois la structure de la table modifiée (ajout de nouvelles colonnes combinant Sting ("N / A") et données doubles dans les mêmes colonnes, l'algorithme de tri personnalisé semble avoir été supprimé. de tri par défaut avec Jtable, mais les colonnes avec des données mélangées donnent classcastException, puis-je conserver le tri personnalisé ou le réappliquer dès que survient l’événement tableStructureChange

Réponses:

0 pour la réponse № 1
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);
}

voici comment vous devriez trier un Jtable. essayez avec ce code et postez s'il y a des exceptions


0 pour la réponse № 2

La question est pourquoi le tableStructureChanged événement étant généré? Cela implique que la structure des colonnes de la table a été modifiée. Comment savez-vous que les mêmes colonnes existeront?

Si vous faites une actualisation de la table, alors pourquoicréez-vous un tout nouveau mode de table? À la place, vous pouvez supprimer toutes les lignes de données de la table (c'est-à-dire utiliser setRowCount (0) dans DefaultTableModel), puis insérer les nouvelles lignes de données. De cette façon le tableStructureEvent ne sera pas généré.

L'autre option consiste à enregistrer les informations de tri et à recréer le trieur. Vous pouvez obtenir les clés de tri actuelles auprès de DefaultRowSorter. La logique de base serait donc:

  1. getSortKeys ()
  2. rafraîchir TableModel
  3. recréer le trieur
  4. setSortKeys (...)

Check-out: Essayer de conserver la position de la trieuse après un rafraîchissement de la table pour un exemple de travail.