[JTable et Model] Pas d'affichage de données
Bonjour,
Je viens de suivre un petit exemple pour creer un model de données.
http://www.developpez.org/club/bkost...ing/table.html
A la différence que je charge mes données depuis un resultset.
Lorsque je lance l'affichage les colonnes s'affichent bien mais pas les données.
Je vous montre le code :
le controleur avec le chargement des vecteurs qui renvoi un model de type DataFileTableModel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JOptionPane;
import utilitaires.DataFileTableModel;
import com.mysql.jdbc.ResultSet;
import da.ClientsDA;
import dto.Client;
import ecrans.EcranClients;
public class CtrlClients {
public CtrlClients() {
super();
}
/**
* Recuperation de la liste globale des clients
* @return jTable
*/
public DataFileTableModel modelClientsGlobale(){
DataFileTableModel model = null;
ResultSet rs = null;
// recuperation du resultset construit dans clientDA
rs = (ResultSet) new ClientsDA().listeClients();
// Declaration du ResultSetMetaData
ResultSetMetaData md = null;
try {
// Construction du ResultSetMetaData
md = (ResultSetMetaData) rs.getMetaData();
// Récuperation du nombre de colonnes
int col = md.getColumnCount();
// Instanciation des deux Vectors
Vector nomColonnes = new Vector();
Vector donnees = new Vector();
// Remplissage du Vector des nom de colonnes
for (int i = 1; i <= col; i++) {
nomColonnes.addElement(md.getColumnName(i));
}
// Remplissage du vector des Données
while (rs.next()) {
Vector row = new Vector();
for (int i = 1; i <= col; i++){
row.addElement(rs.getObject(i));
}
donnees.addElement(row);
}
model = new DataFileTableModel(donnees,nomColonnes);
//jTable.createDefaultColumnsFromModel();
// Construction de la Jtable
//jTable = new JTable(data,nomColonnes);
} catch (SQLException e) {
System.out.println("Erreur SQL : " + e);
} catch (Exception e){
System.out.println("Erreur : " + e);
}
// On retourne la jTable
return model;
} |
La classe tableModel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| import javax.swing.*;
import javax.swing.table.*;
import java.io.*;
import java.util.*;
public class DataFileTableModel extends AbstractTableModel {
protected Vector donnees; //données
protected Vector nomColonnes ; //noms de colonnes
protected String datafile; //nom du fichier de données
/**
* Un Constructeur
*
*/
public DataFileTableModel() {
}
/**
* Un Constructeur
*
*/
public DataFileTableModel(Vector data, Vector columnNames) {
donnees = data;
nomColonnes = columnNames;
}
/**
* Nombre de colonnes
*
*/
public int getColumnCount() {
return nomColonnes.size();
}
/**
* Nombre de lignes
*
*/
public int getRowCount() {
return donnees.size()/getColumnCount();
}
/**
* Noms des colonnes
*
*/
public String getColumnName(int columnIndex) {
String colName="";
if (columnIndex<=getColumnCount())
colName=(String)nomColonnes.elementAt(columnIndex);
return colName;
}
/**
* Types de contenu d'une colonne
*
*/
public Class getColumnClass(int columnIndex){
return String.class;
}
/**
* Possibilite d'édition des données
*
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
/**
* Contenu d'une cellule
*
*/
public Object getValueAt(int rowIndex, int columnIndex) {
return (String)donnees.elementAt(
(rowIndex*getColumnCount())+columnIndex);
}
/**
* Changement du contenue d'une cellule
*
*/
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
} |
Et la methode appelée pour l'affichage de la Jtable
Code:
1 2 3 4 5 6 7 8
| private JTable getJTableClients() {
if (jTableClients == null) {
DataFileTableModel model = new CtrlClients().modelClientsGlobale();
jTableClients = new JTable();
jTableClients.setModel(model);
}
return jTableClients;
} |
En debug les vectors se remplissent bien cependant les données ne s'affichent pas, je n'ai que les colonnes ...
Merci a tous