Remplir jTable à partir d'un ResultSet

Fermé
Eagle_de_nord Messages postés 41 Date d'inscription mercredi 27 août 2008 Statut Membre Dernière intervention 2 décembre 2016 - 29 juin 2012 à 17:37
oumeiima Messages postés 2 Date d'inscription mercredi 14 mai 2014 Statut Membre Dernière intervention 15 mai 2014 - 14 mai 2014 à 14:32
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

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
Eagle_de_nord Messages postés 41 Date d'inscription mercredi 27 août 2008 Statut Membre Dernière intervention 2 décembre 2016
2 juil. 2012 à 21:47
merci infiniment je vais l'appliquer tout de suite et je vous signalerai le résultat ...
0
Eagle_de_nord Messages postés 41 Date d'inscription mercredi 27 août 2008 Statut Membre Dernière intervention 2 décembre 2016
3 juil. 2012 à 01:32
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
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
Eagle_de_nord Messages postés 41 Date d'inscription mercredi 27 août 2008 Statut Membre Dernière intervention 2 décembre 2016 > LaDiva432
3 juil. 2012 à 04:25
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
LaDiva432 > LaDiva432
3 juil. 2012 à 10:05
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
guns65 Messages postés 32 Date d'inscription mardi 28 septembre 2010 Statut Membre Dernière intervention 26 février 2014
Modifié par guns65 le 30/12/2012 à 02:27
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
Eagle_de_nord Messages postés 41 Date d'inscription mercredi 27 août 2008 Statut Membre Dernière intervention 2 décembre 2016
31 déc. 2012 à 19:06
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
31 déc. 2012 à 19:12
Effectivement un import devrait aider :
import javax.swing.table.TableColumn;
0
oumeiima Messages postés 2 Date d'inscription mercredi 14 mai 2014 Statut Membre Dernière intervention 15 mai 2014
14 mai 2014 à 14:32
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