IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTable]Trier la table


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut [JTable]Trier la table
    Bonjour,

    Je cherche à détecter un clic sur le titre d'une colonne d'une JTable, le but étant de trier les lignes merci d'avance !

  2. #2
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Sur la JTable tu as une méthode getTableHeader() qui te renvoie un objet de type JTableHeader : comme cette classe hérite de JComponent, tu peux lui associer un MouseListener.

  3. #3
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut
    merci pour ta réponse ! tout à fait d'accord, mais en fait je viens de trouver une solution qui me conviens à "98%" ici : http://java.sun.com/docs/books/tutor...e.html#sorting
    il suffit d'ajouter les trois lignes indiquées et l'on peut trier sa table.
    Par contre à la première compilation j'ai obtenu un avertissement "unckecked ..." je sais plus quoi, qui a disparu aux compilations suivantes.
    L'inconvénient, c'est que le tri est alphabétique et non numémique donc on obtiens un tri bizard pour les chiffres 9>854123>45>111111111 par exemple, si tu as idée pour effectuer un tri correcte dans le cas des nombres...

  4. #4
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Salut,

    Je connaissais pas TableSorter et je viens de jetter sur le tutorial. En fait c'est basé sur ce que je te proposais, puisque pour associer le "sorter" à la table ils font :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorter.setTableHeader(table.getTableHeader());
    et ensuite cette méthode fait (entre autres choses) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.tableHeader = tableHeader;
    this.tableHeader.addMouseListener(mouseListener);
    Je pense que l'interet de leur proposition est une modélisation qui permet de réaliser le tri dans une classe qui encapsule le modèle de la table.

    En utilisant leur classe TableSorter, j'ai l'impression que tu peux définir des comparator spécifiques, en utilisant la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void setColumnComparator(Class type, Comparator comparator)

  5. #5
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut
    ok merci je regarde cette classe...

  6. #6
    Membre expérimenté Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    J'ai eu l'occasion récemment d'utiliser ce TableSorter (gain de temps non négligeable).

    Ton lien propose seulemt une demo de cette classe.
    Voici l'implémentation complète de TableSorter avec notament la résolution de tes problèmes de comparaison.

    Si tu veux faire simple, la classe est véritablement utilisable telle quelle !
    http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TableSorter.java

  7. #7
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut
    c'est exactement cette classe que je suis en train d'utiliser...
    Le problème c'est que je ne vois pas quelles sont les adaptations à faire pour permettre de trier également des entiers et non uniquement des String (voir mon poste plus haut).

  8. #8
    Membre expérimenté Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Citation Envoyé par FFF
    c'est exactement cette classe que je suis en train d'utiliser...
    Le problème c'est que je ne vois pas quelles sont les adaptations à faire pour permettre de trier également des entiers et non uniquement des String (voir mon poste plus haut).
    Dans la méthode getComparator, tu peux tester le comparator à utiliser sur ta colonne... Donc à toi de faire en sorte que sur les colonnes numériques ce soit un comparateur numérique (avec de simples > < par exemple)

  9. #9
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut
    je vois pas ce que tu veux dire... en fait j'ai l'impression qu'il croit (le programme) que mes cellules sont toutes des String... bien que je mette des Integer...

  10. #10
    Membre expérimenté Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Citation Envoyé par FFF
    je vois pas ce que tu veux dire... en fait j'ai l'impression qu'il croit (le programme) que mes cellules sont toutes des String... bien que je mette des Integer...
    Si tu as récupéré le code entier tu dois voir la méthode que je cite précédemment.
    De la manière tu vois la méthode setColumnComparator(Class, Comparator). Bon elle sert juste à remplir une HashMap de comparators donc les clés sont les types de tes colonnes.

    Tu peux donc jouer avec cette dernière méthode pour mettre le comparator que tu souhaites pour chaque type de données.
    Puis la méthode getComparator récupère le type d'une colonne et va cher cher dans cette HashMap le comparator que tu lui as attribué.

    Le plus simple pour des entiers serait par exemple de modifier getComparator pour qu'en fonction du numéro de colonne il retourne le comparator souhaité en écrivant les num de colonne en dur.
    Ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(column == 3) {
    return myIntComparator;
    }
    Bon, le plus élégant serait tout de même de faire ça de manière plus dynamique et on peut entrevoir 1 ou 2 solutions pour cela (pas trop le temps de rentrer plus en détail, sorry)...

  11. #11
    FFF
    FFF est déconnecté
    Membre éclairé Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Par défaut
    sans rentrer dans le détail normalement, cette classe TableSorter effectue aussi le tri des entiers, cf la démo java, donc je vois pas franchement d'où vient l'erreur
    démo tri de table (lancé à partir de java web start) : http://java.sun.com/docs/books/tutor...TableDemo.jnlp

    dans mon programme j'insers les nombres en tant que integer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabl.setValueAt(new Integer(Integer.parseInt(result[1].toString())),p,1);//taille

  12. #12
    Membre expérimenté Avatar de xxaragornxx
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    Citation Envoyé par FFF
    sans rentrer dans le détail normalement, cette classe TableSorter effectue aussi le tri des entiers, cf la démo java, donc je vois pas franchement d'où vient l'erreur
    démo tri de table (lancé à partir de java web start) : http://java.sun.com/docs/books/tutor...TableDemo.jnlp

    dans mon programme j'insers les nombres en tant que integer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabl.setValueAt(new Integer(Integer.parseInt(result[1].toString())),p,1);//taille
    Dans ton implémentation de ton TableModel pour ta JTable, as tu redéfini la méthode getColumnClass(int column) ? (Et il y a fort à parier que par défaut elle te retourne String).

  13. #13
    Invité de passage
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Par défaut j'ai une soluce elle vaut ce qu'elle vaut donc pas de critique car fonctionnel
    TableRowSorter<TableModel> sorter =
    new TableRowSorter<TableModel>(<votreTable>.getModel());
    <votreTable>.setRowSorter(sorter);
    maintenant à l'utilisation si par exemple comme moi vous vouliez double clicker sur une ligne pour ouvrir un navigateur n'utiliser pas le Model!! mais bien le controleur (Jtable)
    exemple:<votreTable>.getValue.At(indice ligne,indice colonne)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/07/2011, 16h22
  2. [debutant][JTable] Trier selon une colonne
    Par yupa dans le forum Composants
    Réponses: 3
    Dernier message: 08/08/2005, 11h05
  3. Trier une table avec valeur de differentes unités
    Par Sydaze dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/06/2005, 11h43
  4. [VB.NET] Trier une table de mon DataSet
    Par San Soussy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 03/03/2005, 17h30
  5. [JTable] afficher la table vide au début
    Par orgoz dans le forum Composants
    Réponses: 5
    Dernier message: 06/01/2005, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo