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] tri sur des valeurs numeriques


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut [JTable] tri sur des valeurs numeriques
    Bonjour,
    J'utilise un JscrollPane et un Jtable pour afficher un tableau.
    Le Jtable est chargé par un vector de vector.
    Dans la table, il y a une colonne avec des valeurs numériques, hors quand je clique sur l'en-tête pour les trier, les valeurs sont triées de cette façon : 1-10-100-2-20-200 au lieu de 1-2-10-20-100-200.

    Je n'arrive pas trop a situer le problème.

    Voici comment je remplis le vector :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Vector vect2 = new Vector();
    Vector vect = new Vector();
    vect.addElement(String.valueOf(sdf2.format(calendrier.getDate())));
    vect.addElement(Double.valueOf(prix));
    vect.addElement(String.valueOf(txtfDescription.getText()));
    vect.addElement(String.valueOf(c.getNomCategorie()));
    vect2.addElement(vect);
    tm = new TableModelDepense(vect2,titreColonnes);
    jTdep.setModel(tm);
    et voici ma classe TableModelDepense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    package display;
     
    import java.util.Vector;
     
    import javax.swing.table.AbstractTableModel;
     
    public class TableModelDepense extends AbstractTableModel {
     
    	Vector vect;
    	String titres[];
    	public TableModelDepense(Vector vect, String titres[]) 
    	{
    		this.vect = vect;
    	    this.titres = titres;
    	}
     
    	   public int getColumnCount() 
    	   {
    	       return titres.length;
    	   }
     
    	   public Object getValueAt(int parm1, int parm2)
    	   {
    		   Vector row = (Vector)vect.get(parm1);
    		   return row.get(parm2);
    	   }
     
    	   public int getRowCount() 
    	   {
    	       return vect.size();
    	   }
     
    	   public String getColumnName(int col)
    	   {
    	     return titres[col];
    	   }
     
    }
    Merci de m'éclairer

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    C'est un tri alphabétique, et non numérique. Le "1" est avant le "2", donc le "10" sera avant le "2".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Essaie en implémentant la méthode getColumnClass dans ton Model pour qu'elle renvoie Double pour les colonnes numériques, String pour les alphanumériques. Par contre il faut absolument que tous les objets dans la colonne soient du même type.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par sinok Voir le message
    Essaie en implémentant la méthode getColumnClass dans ton Model pour qu'elle renvoie Double pour les colonnes numériques, String pour les alphanumériques. Par contre il faut absolument que tous les objets dans la colonne soient du même type.
    Merci, j'ai mis cela dans mon modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Class getColumnClass(int columnIndex)
    {
       if(columnIndex==1)return Double.class;
       else return String.class;
    }
    Cela fonctionne merci.

    Mais j'ai l'impression que c'est un peu du bricolage !!!

    Peut être devrais je charger mon JTable autrement qu'avec un vector ?

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Non ce n'est pas du bricolage. En effet l'est de cette méthode dont la JTable se sert pour déterminer le type de données auxquelles elle a à faire, et décide d'effectuer le tri en conséquence. J'ai rarement eu à coder un model sans avoir à redéfinir cette méthode (ne serait-ce que pour utiliser de façon aisée les Renderers)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Ok
    Je te remercie

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

Discussions similaires

  1. [Math]Problème troncage ou arrondi sur des valeurs
    Par Carrel dans le forum Général Java
    Réponses: 6
    Dernier message: 07/10/2009, 15h11
  2. [JS] contrôle sur la saisie d'un champ avec des valeurs numeriques ?
    Par adil_vpb dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 22/03/2007, 11h12
  3. Quotes sur des valeurs numériques
    Par shadeoner dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/05/2006, 14h56
  4. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 09h27
  5. "Order by" sur des valeurs spécifiques
    Par damienTrax dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/11/2004, 09h20

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