Tri de colonne dans un jtable [Résolu]

Messages postés
22
Date d'inscription
jeudi 22 janvier 2009
Dernière intervention
6 novembre 2012
- - Dernière réponse : nam90
Messages postés
22
Date d'inscription
jeudi 22 janvier 2009
Dernière intervention
6 novembre 2012
- 2 juin 2009 à 16:35
bonjour à tous,
voilà de puis quelques temps j'essaye de trier les colonnes de ma jtable et ça marche bien, le seul problème se trouve sur les colonnes comportant des chiffres car le tri se fait que par le premier numero par exple si g une colonne avec 1,100,2,20,4,25 au lieu d'avoir ça: 1,2,4,20,25,100 g ça: 1,100,2,20,25,4
est-ce quelqu'un peut m'aider svp, voici mon code:

 public ResultSet afficheListeAgent()
    {
        setTitle("liste des agents");
        setSize(500,500);
        ResultSet results = null;
        Vector column= new Vector();
        Vector data1 = new Vector();
        Vector row1;
        column.removeAllElements();
        data1.removeAllElements();
       
        try{
            String sql = "Select matricule,nomComplet as Agent,service from Agent";
            results = base.requete(sql);
            ResultSetMetaData rsmd = results.getMetaData();
            int columns = rsmd.getColumnCount();
 
            for (int i = 1; i <= columns; i++)
            {
                column.addElement( rsmd.getColumnName(i) );
            }
 
            while (results.next())
            {
                row1 = new Vector(columns);
 
                for (int i = 1; i <= columns; i++)
                {
                    row1.addElement( results.getObject(i) );
                }
                data1.addElement( row1 );
            }
        }
        catch(Exception e)
        {
            System.out.println( e );
        }
       
        final JTable table = new JTable(data1, column){
            public boolean isCellEditable(int rowIndex,int ColumnIndex){
                return false;
            }};
        //table.setFillsViewportHeight(true);
        table.setAutoCreateRowSorter(true);
        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
        setVisible(true);
        table.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
          if (e.getClickCount() == 2)
          {
              System.out.println(table.getModel());
              Saisie s = new Saisie();
              s.jTextField1.setText(table.getValueAt(table.getSelectedRow(),0).toString());
            }
        }});
        return results;
    }
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
493
Date d'inscription
samedi 20 mai 2006
Dernière intervention
15 juillet 2012
3
Merci
Nous devons assigner la classe à chaque colonne. Exemple:
...
            model = new MyModel(data1, column);
            for (int i = 1; i <= columns; i++) {
                try {
                    String className = rsmd.getColumnClassName(i);
                    model.setColumnClass(i - 1, Class.forName(className));
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            }
...
        model.setDataVector(data1, column);
        final JTable table = new JTable(model);
...
class MyModel extends DefaultTableModel {
    private Class[] types;
    public MyModel(final Vector data, final Vector columnNames) {
        super(data, columnNames);
        types = new Class[columnNames.size()];
    }
    public void setColumnClass(final int column, final Class columnClass) {
        types[column] = columnClass;
        fireTableRowsUpdated(0, getColumnCount() - 1);
    }
    @Override
    public Class getColumnClass(final int column) {
        return types[column];
    }
    @Override
    public boolean isCellEditable(final int rowIndex, final int ColumnIndex) {
        return false;
    }
}

Merci uhrand 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de uhrand
Messages postés
22
Date d'inscription
jeudi 22 janvier 2009
Dernière intervention
6 novembre 2012
0
Merci
bonjour,
j'ai essayé avec l'exemple que vous m'avez donné, mais ça ne m'affiche rien.je ne sais pas où se trouve l'erreur, voici le code:

public ResultSet afficheListeEnfant()
     {
        setTitle("liste des enfants");
        setSize(500,500);
        BaseDD base = new BaseDD();
        base.OpenConnection("jdbc:odbc:ArbreNoel","admin","admin");
        ResultSet results = null;
        final Vector columnNames= new Vector();
        final Vector data = new Vector();
        Vector row;
        //columnNames.removeAllElements();
        //data.removeAllElements();
        MyModel model = new MyModel(data,columnNames);
 
        try{
            String sql = "Select enfant.numid ,enfant.nomEnfant as Enfant,enfant.dateNaissance as Naissance,libelle as "Jouet Choisi" from (Choix inner join Enfant on enfant.numid=choix.numid)left outer join jouet on choix.refjouet=jouet.reference order by Enfant.numID;";
            results = base.requete(sql);
            ResultSetMetaData rsmd = results.getMetaData();
            int columns = rsmd.getColumnCount();
 
            for (int i = 1; i <= columns; i++)
            {
                try{
                    String className = rsmd.getColumnClassName(i);
                    model.setColumnClass(i-1,Class.forName(className));
                }
                catch(Exception exception)
                {
                    exception.printStackTrace();
                }
                //columnNames.addElement( rsmd.getColumnName(i) );
            }
 
            while (results.next())
            {
                row = new Vector(columns);
 
                for (int i = 1; i <= columns; i++)
                {
                    row.addElement( results.getObject(i) );
                }
                data.addElement( row );
            }
            results.close();
        }
        catch(Exception e)
        {
            System.out.println( e );
        }
        model.setDataVector(data,columnNames);
        JTable table = new JTable(model);/*(data, columnNames){
            public boolean isCellEditable(int rowIndex,int ColumnIndex){
                return false;
            }};*/
        //table.setFillsViewportHeight(true);   
        table.setAutoCreateRowSorter(true);
        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
        setVisible(true);
        return results;
    }
}
Commenter la réponse de nam90
Messages postés
22
Date d'inscription
jeudi 22 janvier 2009
Dernière intervention
6 novembre 2012
0
Merci
bonjour,
en fait c'est qui avait oublié de mettre dans la methode getColumnClass le type
maintenant ça marche.
merci beaucoup.
Commenter la réponse de nam90

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.