Partage
  • Partager sur Facebook
  • Partager sur Twitter

L'équivalent de elementAt au niveau de ArrayList

    18 septembre 2017 à 18:20:55

    Bonjour

    J'utilise les vecteurs pour afficher les données dans une JTable. Au niveau de la redéfinition de la méthode getValueAt(), j'utilise la méthode elementAt() comme ceci:

    public Object getValueAt(int row, int col) {
     
               return ((Vector)data.elementAt(row)).elementAt(col);
            }

    Cependant, j'ai laissé tomber les vector au profit de ArrayList mais je ne sais pas comment redéfinir la méthode getValueAt().

    Car ceci m'affiche chaque ligne dans chacune des cellules:

    public Object getValueAt(int row, int col) {
               return data.get(row);
            }


    Merci

    -
    Edité par momjunior 18 septembre 2017 à 18:21:28

    • Partager sur Facebook
    • Partager sur Twitter
      18 septembre 2017 à 20:52:22

      Bonjour,

      Tout simplement avec

      return data.get(row).get(col);



      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2017 à 22:38:37

        J'ai déjà essayé ça mais netbeans me souligne le 2e get en rouge me dit:

        Cannot find symbol
        
        symbol: method get(int)



        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2017 à 22:52:19

          C'est quoi ta structure ? Une arraylist d'arraylist ? Montre ta structure parce qu'on es un peu dans le flou la
          • Partager sur Facebook
          • Partager sur Twitter
          @autor VinYarD
            18 septembre 2017 à 23:12:19

            Voici toute ma structure:

            public class MyTableModel extends AbstractTableModel {
                private String url="jdbc:mysql://localhost:3306/gesentrep_db";
                private String user = "root";
                private String passwd = "passer";
                private Connection con;
                private ResultSet res;
                private Statement state;
                private ResultSetMetaData resultMeta;
                
                private final ArrayList columnNames = new ArrayList() ;
                // Each value in the vector is a row; String[] - row data;
                private ArrayList data = new ArrayList();
                
                  
                    private int ligneCount;
                    private long totalTime;
                    
                    public MyTableModel ()
                    {
                    try {
                                    Class.forName("com.mysql.jdbc.Driver");
                                } catch (ClassNotFoundException ex) {
                                    //JOptionPane.showMessageDialog(null,ex.getMessage());
                                   JOptionPane.showMessageDialog(null,"Impossible de charger le pilote!"+ex.getMessage());
                                    //JOptionPane.showMessageDialog(null,"Impossible de charger le pilote!");
                                }
            
                             try {
                        con = (java.sql.Connection) DriverManager.getConnection(url, user, passwd);
                      
                    } catch (SQLException ex) {
                        JOptionPane.showMessageDialog(null,"Impossible d'établir la connexion!"+ex.getMessage());
                    }
                             try {
                             String requete = null;
                           requete="select * from user ";
                                     //Création d'un objet Statement
                                       long start = System.currentTimeMillis();
                                       state = con.createStatement();
                                     //L'objet ResultSet contient le résultat de la requête SQL
                                       res = state.executeQuery(requete);
                                     //On récupère les MetaData
                                       resultMeta = res.getMetaData();
                                     
                                       //On récupère les meta afin de récupérer le nom des colonnes
                                        ResultSetMetaData meta = res.getMetaData();
                                        int nbrCol = meta.getColumnCount();
                                       meta.getColumnClassName(nbrCol).getClass();
                                        System.out.println("le nombre de colonne est:" +nbrCol);
                                        
                                        
                                        //On initialise un tableau d'Object pour les en-têtes du tableau
                                       //  columnNames = new String[nbrCol]; 
                                         columnNames.add("Case à cocher"); 
                                    
                                        try {                            
                                        for(int i = 1 ; i <= nbrCol; i++)
                                        {
                                            System.out.println("le nom de colonne est:" +resultMeta.getColumnName(i));
                                            columnNames.add(resultMeta.getColumnName( i ));
                                       // columnNames[i] = resultMeta.getColumnName( i ); // décalage d'index
                                        }
                                        } catch (SQLException e) {
                                     System.out.println("Erreur:"+e);
                                 }
                                        System.out.println("le nom de la 1ere colonne est:"+columnNames.get(0));
                                        int a = columnNames.size();
                                        System.out.println("la taille du tableau est:"+a);
                                       
                                        //Petite manipulation pour obtenir le nombre de lignes
                                        res.last();
                                         ligneCount = res.getRow();
                                     
                                       
                                       // Object[][] data1 = new Object[rowCount][nbrCol+1];
                                        
                                        //On revient au départ
                                        res.beforeFirst();
                                        
                                        int j = 0;
                                        //On remplit le tableau d'Object[][]
                                        while(res.next()){
                                           ArrayList row = new ArrayList();
                                           row.add(new Boolean(false));
                                            try {
                                                for(int i = 1 ; i <= nbrCol; i++)
                                            {
                                            
                                             row.add(res.getObject(i));
                                            }
                                            j++; 
                                            data.add(row);
                                        } catch (SQLException ex) {
                                     System.out.println("Erreur ici:"+ex);
                                 }
                                                                       
                                        } 
                                        //On ferme le tout
                                        res.close();
                                        state.close();
                                         totalTime = System.currentTimeMillis() - start;
                                     
                                        
                             } catch (SQLException ex) {
                                     JOptionPane.showMessageDialog(null,"Erreur à ce niveau"+ex);
                                 }
                             
                            
                    }
                
             
                    public int getColumnCount() {
                        return columnNames.size();
                    }
             
                    public int getRowCount() {
                        return data.size();
                    }
             
                    public String getColumnName(int col) {
                     return (String) columnNames.get(col); // pas de décalage d'index
                    }
            
                    
                    public Object getValueAt(int row, int col) {
                       	
            return data.get(row).get(col);
                    }
             
                    /*
                     * JTable uses this method to determine the default renderer/
                     * editor for each cell.  If we didn't implement this method,
                     * then the last column would contain text ("true"/"false"),
                     * rather than a check box.
                     */
                    public Class getColumnClass(int c) {
                     //   return resultMeta.getColumnClassName(c).getClass();
                        return getValueAt(0, c).getClass();
                    }
             
                    /*
                     * Don't need to implement this method unless your table's
                     * editable.
                     */
                    public boolean isCellEditable(int row, int col) {
                        //Note that the data/cell address is constant,
                        //no matter where the cell appears onscreen.
                        return true;
                    }
             
                    /*
                     * Don't need to implement this method unless your table's
                     * data can change.
                     */
                    public void setValueAt(Object value, int row, int col) {
                       data.set(row, value);
                        fireTableCellUpdated(row, col);
                    }
                    
                    public int nbrLigne()
                    {
                        
                     return ligneCount;
                    }
                    
                    public long temps()
                    {
                        
                     return totalTime;
                    }
                    
                    public void removeRow(int row) {
                    data.remove(row);
                }
             
                }
             



            • Partager sur Facebook
            • Partager sur Twitter
              19 septembre 2017 à 14:29:21

              Il faut typer correctement tes collections, et ne jamais utiliser le type Object.

              Ainsi, ta déclaration des columns doit se faire comme ceci:

              List<String> columns = new ArrayList<String>();


              Et tes données :

              List<List<Object> > data = new ArrayList<List<Object> >();


              Comme je le disais, il faudra penser par remplace Object par le vrai type que tu souhaite afficher. Logiquement une String. Il faudra alors que tu convertisses les valeurs récupérées de ton resultset en String.

              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2017 à 18:42:15

                J'aurais une chose a ajouter, tu veux ajouter tes donnees dans une JTable, avec du coup une arrayList d'arrayList, pourquoi pas mais ce n'est pas propre, quand tu regarde un JTableModel c'est quand meme preferable d'avoir une ArrayList ou un tableau, collection peu importe d'objet, si c'est un tableau de voiture par exemple : ArrayList<Voiture>, et Voiture comporte toutes les variables de ton deuxieme arraylist.

                Jette un coup d'oeil du cote du Pattern DAO qui traite de la base de donnee et de comment transformer tes tables en objet java proprement efficacement et en minimisant les bugs et la complexite.

                Voila !

                • Partager sur Facebook
                • Partager sur Twitter
                @autor VinYarD
                  23 septembre 2017 à 15:33:47

                  Ok merci. Je vais suivre vos conseils.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  L'équivalent de elementAt au niveau de ArrayList

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown