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 :

Methode de Tri pour une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut Methode de Tri pour une JTable
    Bonjour,

    J'ai une application qui remplit une JTable en fonction de diverses données.
    Cette table est triable lorsque l'on clique sur le nmo de la colonne.
    Seul problème, c'est que le tri se fait "alphanumériquement" sur les colonnes possédant des données de type Integer.

    Je me suis renseigné sur le site d'Oracle et sur ce forum, mais je n'ai pas réussi à trouver mon bonheur.

    Voici mon bout de code :

    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
    donnees = remplissage();
     
    		DefaultTableModel model = new DefaultTableModel(donnees, titreColonnes) {		
    			public boolean isCellEditable(int row, int column) {
    				return false; //aucune cellule editable
    			}
    		};
     
    		TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    		JTable table = new JTable(model);
    		System.out.println(table.getColumnClass(3));
    		System.out.println(table.getColumnClass(2));
    		table.setRowSorter(sorter);
    		table.setPreferredScrollableViewportSize(new Dimension(640, 200));
    		table.setFillsViewportHeight(true);

    C'est ma 3° colonne qui possède les int et qui renvoie Ojbet en type de classe lorsque je fait mon system.out.

    Remplissage est une fonction :

    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
    private Object[][] remplissage(){
     
    		Object[][] liste = new Object[elements.size()][4];
     
    		for(int i = 0; i < elements.size(); i++){
     
    			liste[i][0] = elements.get(i).get_code_msgid();
    			liste[i][1] = elements.get(i).get_code_user();
    			liste[i][2] = (Integer) elements.get(i).get_temps();
     
    			if(elements.get(i).get_requete_insert().equals("")){
    				liste[i][3] = elements.get(i).get_date_select();
    			}
    			else if(elements.get(i).get_requete_select().equals("")){
    				liste[i][3] = elements.get(i).get_date_insert();
    			}
    			else{liste[i][3] = elements.get(i).get_date_insert();}//??
     
     
    		}
     
    		return liste;
     
    	}

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut que la méthode getColumnClass de ton modèle renvoie un type numérique (Float.class,Integer.class,Double.class,BigInteger.class,BigDecimal.class ...) pour les colonnes contenant des données chiffrées.

  3. #3
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut
    Oui j'avais compris en regardant les différents exemples qui sont proposés sur le site d'Oracle.

    Il faut du coup que je créé une classe de type monModel ou un truc comme ça ?

    Car je ne voyais pas trop comment faire ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Class<Integer> getColumnClass(int column){
         return monModel.getColumnClass(column);
    }
    Je suppose que c'est ça mais où le placer ? dans une nouvelle classe ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il te faut créer ton propre modèle héritant de DefaultTableModel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MyModel extends DefaultTableModel {
     
    	@Override
    	public Class<?> getColumnClass(int col) {
    		if(col == 3) {
    			return Integer.class;
    		}
    		return super.getColumnClass(col);
    	}
     
    }
    Puis tu utilises ce modèle à la place du DefaultTableModel dans ta classe.

  5. #5
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut
    hmmm il faut donc que je créé un constructeur pour la classe MyModel alors ?
    et sinon le reste des méthodes n'ont pas besoin d'être refaites du coup ?

    Dois je obtenir un truc de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyModel model = new MyModel(donnees, titreColonnes) {		
    			public boolean isCellEditable(int row, int column) {
    				return false; //aucune cellule editable
    			}
    		};

  6. #6
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut
    Je suppose que mon code est correct, mais ça ne fonctionne toujours pas :

    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 MyModel extends DefaultTableModel {
     
    			public MyModel(Object[][] l, Object[] c){
    				super(l, c);
    			}
     
    			@Override
    			public Class<?> getColumnClass(int col) {
    				if(col == 3) {
    					return Integer.class;
    				}
    				return super.getColumnClass(col);
    			}
     
    		}
     
     
    		MyModel model = new MyModel(donnees, titreColonnes) {		
    			public boolean isCellEditable(int row, int column) {
    				return false; //aucune cellule editable
    			}
    		};

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

Discussions similaires

  1. Fusion de cellules pour une JTABLE
    Par niggaz972 dans le forum Composants
    Réponses: 10
    Dernier message: 30/07/2009, 17h13
  2. ArrayList ou Tableau pour une JTable
    Par bandit_debutant dans le forum Composants
    Réponses: 2
    Dernier message: 12/06/2008, 12h28
  3. Besoin d'aide pour une jTable
    Par Sh4dounet dans le forum Composants
    Réponses: 2
    Dernier message: 13/03/2007, 17h23
  4. [MySQL] Problème de tri pour une application
    Par nanor21 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 11/05/2006, 19h08
  5. Tri d'une JTable pour des nombres
    Par chasse dans le forum Composants
    Réponses: 2
    Dernier message: 20/04/2006, 15h25

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