Tri de colonne dans un jtable

Résolu
nam90 Messages postés 21 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 6 novembre 2012 - 29 mai 2009 à 11:22
nam90 Messages postés 21 Date d'inscription jeudi 22 janvier 2009 Statut Membre 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;
    }

3 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
31 mai 2009 à 04:34
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;
    }
}
3
nam90 Messages postés 21 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 6 novembre 2012
2 juin 2009 à 10:18
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;
    }
}
0
nam90 Messages postés 21 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 6 novembre 2012
2 juin 2009 à 16:35
bonjour,
en fait c'est qui avait oublié de mettre dans la methode getColumnClass le type
maintenant ça marche.
merci beaucoup.
0
Rejoignez-nous