Remplir jTable à partir d'un ResultSet

Eagle_de_nord Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -  
oumeiima Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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

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
Eagle_de_nord Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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
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
Eagle_de_nord Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   > 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
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
guns65 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Effectivement un import devrait aider :
import javax.swing.table.TableColumn;
0
oumeiima Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
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