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] Le tri ne se fait que par paquet


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut [JTable] Le tri ne se fait que par paquet
    Bonjour,

    J'ai un JTable très grand (plusieurs milliers de lignes) et je voudrais le trier par rapport à une colonne contenant des nombres. Ma procédure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TableRowSorter sorter = new TableRowSorter<DefaultTableModel>(monModel);
    		  NumberComparator comparateurNombre = new NumberComparator();
    	      sorter.setComparator(3, comparateurNombre);
                 monTableau.setRowSorter(sorter);
    la classe NumberComparator est la suivante (je marque "-" quand c'est un NaN ou Infinity) :
    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
    class NumberComparator implements Comparator<String> {
     
    	public int compare(String o1, String o2) {
    		Double d1,d2;
    		try {
    			if(o1.equals("-")) d1=10000000.;
    			if(o2.equals("-")) d2=10000000.;
    			d1 = Double.parseDouble(o1);
    			d2 = Double.parseDouble(o2);
    			return (int) (d1-d2);
    		} catch (Exception e) {
    			//e.printStackTrace();
    		}
    		return 0;
    	}
    }

    Mon soucis est qu'on dirait qu'il traite le tri par paquet (d'environ 500) et la colonne est trié par exemple comme cela :

    1
    2
    3
    40
    56
    60
    -
    -
    -
    2
    6
    7
    40
    80
    -
    -
    -

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Par défaut
    Dans les cas où l'une des valeurs est égale à "-", ton code passe quand même sur le "parseDouble" et fini par retourner 0. Ton problème vient probablement de là.

    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
    class NumberComparator implements Comparator<String> {
     
    	public int compare(String o1, String o2) {
    		final double d1,d2;
    		try {
    			if(o1.equals("-")){
                                 d1 = Double.MAX_VALUE;
                            }else{
                                 d1 = Double.parseDouble(o1);
                            }
    			if(o2.equals("-")){
                                 d2 = Double.MAX_VALUE;
    			}else{
                                 d2 = Double.parseDouble(o2); 
                            }
    			return (int) (d1-d2);
    		} catch (Exception e) {
    			//e.printStackTrace();
    		}
    		return 0;
    	}
    }
    Ce qui équivaut aussi à (je préfère car cest plus synthétique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            class NumberComparator implements Comparator<String> {
                public int compare(String o1, String o2) {
                    final double d1, d2;
                    try {
                        d1 = o1.equals("-") ? Double.MAX_VALUE : Double.parseDouble(o1);
                        d2 = o2.equals("-") ? Double.MAX_VALUE : Double.parseDouble(o2);
                        return (int) (d1 - d2);
                    } catch (Exception e) {
                        //e.printStackTrace();
                    }
                    return 0;
                }
            }
    Note : j'ai remplacé 10000000 par Double.MAX_VALUE qui me semble plus approprié dans ton cas

Discussions similaires

  1. TCP : Utilisation paquet par paquet plutot que flux
    Par dockurt2k dans le forum Développement
    Réponses: 6
    Dernier message: 12/01/2007, 12h03
  2. fileName autrement que par split ?
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/06/2006, 23h48
  3. tri d'index de tableau par rapport au contenu
    Par parisien dans le forum C
    Réponses: 7
    Dernier message: 14/02/2006, 00h32
  4. Réponses: 2
    Dernier message: 10/03/2004, 19h52

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