Remplir jTable à partir d'un ResultSet

Eagle_de_nord Messages postés 46 Statut Membre -  
oumeiima Messages postés 3 Statut Membre -
Bonjour,

Voila j'aimerai bien avoir une idée sur le remplissage des jTable a partir d'une requête SELECT SQL et bien sur en passant par un ResultSet() ...
j'ai vu sur le net qu'il faut créer un TableModel mais je n'ai compris le principe....
merci de me guider ...

merci d'avance pour votre aide

<config>Windows 7 Firefox 12.0</config>

2 réponses

  1. LaDiva432
     
    Bonjour,
    Je vais essayer de te résumer le code en étapes :

    1- dans ta méthode tu déclares des objets dans lesquelles tu retournes les enregistrement de la base ( un objet pour chaque champ) ex :
    Col1 = new String[100];
    Col2 = new String[100];
    ....

    2- tu déclares un objet data de type Object comme ceci :
    data = new Object[200][N]; // N étant le nombre de colonnes de ton JTable 200 nb lignes

    3- tu ouvres ta connexion avec la base de données ... (Class.forName.. et le baratin qui va avec)

    4- la requête

    5- tu récupère le résultat de la requête dans un ResultSet

    // stmt etant le preparedStatement
    ResultSet rs=stmt.executeQuery();

    while (rs.next()) {

    Col1 [j] = rs.getString("Champ1");
    Col2[j] = rs.getString("Champ2");
    ... // pour autant de colonnes que tu veux retourner

    data[j][i]= Col1 [j];
    data[j][i+1]= Col2[j];
    ....
    j++;
    }
    // les entetes des colonnes :
    String title[] = {"La colonne 1", "La colonne 2",....};
    JTable table = new JTable(data, title);

    JPanel tableau = new JPanel (new BorderLayout ());
    // ajoute les entetes au nord du conteneur
    tableau.add (table.getTableHeader (), BorderLayout.NORTH);
    tableau.add (table, BorderLayout.CENTER);
    JSplitPane split3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, tableau, new JTextArea (" Avec ent\u00EAte "));
    TableColumn column = null;
    for(int i=0;i<4 ; i++){
    column= table.getColumnModel().getColumn(i);
    column.setPreferredWidth(180);
    }
    P.add(tableau); // P étant le panel de la fenetre
    // un scrollPan en cas de besoin
    JScrollPane scrollpane = new JScrollPane(P,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    this.getContentPane().add(scrollpane);
    6- tu finis avec un catch ....

    Il n'y a pas plus simple :-)
    0
    1. Eagle_de_nord Messages postés 46 Statut Membre
       
      merci infiniment je vais l'appliquer tout de suite et je vous signalerai le résultat ...
      0
    2. Eagle_de_nord Messages postés 46 Statut Membre
       
      Bonjour

      alors voila ce que j'ai fais :
      1) j'ai créé une classe Jforme
      2) la classe contient un bouton "OK "pour appeller le méthode en question (okActionPerformed) c-a-d lorsque je clique sur OK il va m'afficher le résultat :comme suite ...

      JPanel p = new JPanel (new BorderLayout ());

      try {
      Class.forName("com.mysql.jdbc.Driver");
      connexion = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/csh","root","");
      statement = (Statement) connexion.createStatement();
      String SelectUser =" Select * from compte ";
      resultat = (ResultSet) statement.executeQuery(SelectUser);

      while (resultat.next()){
      int j=0;
      int i=0;
      Col1 [j] = resultat.getString("login");
      Col2[j] = resultat.getString("password");
      data[j][i]= Col1 [j];
      data[j][i+1]= Col2[j];


      }// fin while
      } // fin try
      catch (ClassNotFoundException ex) {
      Logger.getLogger(model.class.getName()).log(Level.SEVERE, null, ex);
      } catch (SQLException ex) {
      Logger.getLogger(model.class.getName()).log(Level.SEVERE, null, ex);
      }

      catch(Exception e){
      System.out.println(e);
      }


      JTable table = new JTable(data, title);

      JPanel tableau = new JPanel (new BorderLayout ());


      tableau.add (table.getTableHeader (), BorderLayout.NORTH);
      tableau.add (table, BorderLayout.CENTER);
      JSplitPane split3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, tableau, new JTextArea (" Avec ent\u00EAte "));
      TableColumn column = null;

      for (int k =0; k<2 ; k++){

      column= table.getColumnModel().getColumn(k);
      column.setPreferredWidth(180);
      }

      p.add(tableau); // P étant le panel de la fenetre
      // un scrollPan en cas de besoin
      JScrollPane scrollpane = new JScrollPane(p,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
      this.getContentPane().add(scrollpane);
      // TODO add your handling code here:
      }



      Merci le Problème et que rien ne s'affiche dans la table quand je clique sur bouton "OK "...
      et je n'ai aucun message d'erreur sur Netbeans
      je n'ai que
      "
      run:
      BUILD SUCCESSFUL (total time: 4 seconds)"

      merci de votre aide
      0
    3. LaDiva432
       
      Bonsoir,
      Oui c'est tout à fait normal ! il faut que tu crées le JTable à l'intérieur du try juste aprés le while! et ce n'est que après que tu ajoutes le catch!
      Donc tu déplaces tout le code à partir de la création du JTable jusqu'à l'ajout du ScrollPane dans le try. Ensuite tu enchaînes avec le catch ...
      Et normalement ca devrait fonctionner ;)

      Bon courage
      0
    4. Eagle_de_nord Messages postés 46 Statut Membre > LaDiva432
       
      merci LaDiva432 pour vos efforts :)
      alors j'ai corrigé ce que vous m'avais signalé ,
      mais malgré cela ça ne fonctionne pas .. pourtant avec le System.out.println(data [0][0] +" "+ data [0][1] ); affiche le résultat de la requête correctement ...
      0
    5. LaDiva432 > LaDiva432
       
      je t'en prie ! :)
      je vois pas la déclaration du string tilte ( attribut du JTable dans ton code ) ! vérifies il se peut que l'erreur vienne de là ;)
      0
  2. guns65 Messages postés 38 Statut Membre
     
    salut :) j'ai suivi ce que vous avez ecrit mais il mafiche l'rreru suivante !!
    java:219: error: cannot find symbol
    TableColumn column = null;
    ^
    est ce que quekqu'un peut m'aider :) merci
    0
    1. Eagle_de_nord Messages postés 46 Statut Membre
       
      saam

      je ne suis pas sûr de la réponse, mais bon... ça peut servir a qlq chose.

      essaye de vérifier si :

      1) les classes sont dans le même package (sinon fait un import....).
      2) la déclaration des tables et des autres variables ...
      3) l'instanciation des variables...
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Effectivement un import devrait aider :
      import javax.swing.table.TableColumn;
      0
    3. oumeiima Messages postés 3 Statut Membre
       
      LaDiva432, j'ai bien suivi tes conseils , car j'étais vrmt besoin d'apprendre comment afficher les resltats d'une requette dans un JTABLE
      mais j'ai rencontrer un problème , c que dans l'affichage , seule la dernière ligne de ma table sql est afficher , les autres ligne , ne s'affiche pas !
      0