Trier les colonnes d’un JTable – Java

JTable est un composant Swing flexible qui est très bien adapté pour afficher des données dans un format tabulaire. Le tri des lignes par colonnes est une fonctionnalité intéressante fournie par la classe JTable. Dans ce tutoriel, vous apprendrez quelques techniques pour trier des lignes dans JTable.
 
 

Méthode 1 : Activer le tri pour JTable

Utilisez l’instruction suivante pour activer le tri par défaut de la table:

table.setAutoCreateRowSorter(true);

Maintenant, exécutez le programme et cliquez sur le Header d’une colonne(la petite flèche ne s’affiche pas que lorsque vous cliquez sur la colonne). Nous constatons que les lignes du tableau sont triées par cette colonne dans l’ordre croissant, et vice-versa si nous cliquons à nouveau:


 
Maintenant, l’utilisateur peut cliquer sur n’importe quel header pour trier les données du tableau par cette colonne. Cependant, remarquez-vous que la table n’est pas trié au lancement du programme. Comment obtenir le tri du tableau par défaut? La réponse est décrite dans la méthode suivante juste en dessous.
 

Méthode 2 : Tri par défaut pour JTable

Pour trier la table par colonne par défaut, nous devons créer un TableRowSorter et une SortKey qui spécifie l’index de la colonne (par lequel la table est triée) et l’ordre de tri (croissant ou décroissant). Par exemple, le code suivant trie la 2éme colonne (à l’index 1) par ordre croissant:
 

import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class SortJTable {

    public static void main(String[] args) {
        new SortJTable();
    }

    public SortJTable() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() 
            {
                //Header de JTable 
                String[] columns = new String[] {
                     "Id",
                     "Nom", 
                     "Adresse", 
                     "Taux horaire"
                };

                //données pour JTable dans un tableau 2D
                Object[][] data = new Object[][] {
                     {1, "Thomas", "Paris", 20.0 },
                     {2, "Jean", "Marseille", 50.0 },
                     {3, "Yohan", "Lyon", 30.0 },
                     {4, "Emily", "Toulouse", 60.0 },
                     {5, "Alex", "Nice", 10.0 }
                };
 
                //crée un JTable avec des données
                JTable table = new JTable(data, columns);
                TableRowSorter<TableModel> s = new TableRowSorter<TableModel>(table.getModel());
                //trier les lignes de JTable
                table.setRowSorter(s);

                java.util.List<RowSorter.SortKey> sortList = new ArrayList<>(5);
                sortList.add(new RowSorter.SortKey(1, SortOrder.ASCENDING));
                sortList.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
                s.setSortKeys(sortList);

                JFrame f = new JFrame("Trier JTable");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.add(new JScrollPane(table));
                f.setSize(400, 180);
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}

Sortie:


 
Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *