Tri de colonne dans un jtable [Résolu]

Signaler
Messages postés
21
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
6 novembre 2012
-
Messages postés
21
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
6 novembre 2012
-
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

Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
9
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;
    }
}
Messages postés
21
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
6 novembre 2012

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

bonjour,
en fait c'est qui avait oublié de mettre dans la methode getColumnClass le type
maintenant ça marche.
merci beaucoup.