[jTable & HSQLDB] 1 seule ligne de la table affichée qui en contient plusieurs
Morpheusyz
Messages postés11Date d'inscriptionlundi 21 mars 2005StatutMembreDernière intervention11 juin 2009
-
1 juin 2009 à 18:10
Morpheusyz
Messages postés11Date d'inscriptionlundi 21 mars 2005StatutMembreDernière intervention11 juin 2009
-
10 juin 2009 à 16:33
Bonjour à tous !
Voici mon problème:
Dans une jTable, je souhaite affiché les données contenue dans uen base local (HSQL) même principe qu'avec MYSQL.
Cependant ma jTable n'affiche que la première ligne de ma table qui en contient 2. Ou est l'erreur?
## Application.java :
...
CustomTableModel tab = new CustomTableModel(pilote,host,login,pw,sql);
JTable T = new JTable(tab);
T.setModel(tab);
JScrollPane jsp= new JScrollPane(T);//ScrollPane
...
public class CustomTableModel extends DefaultTableModel {
public static SQLExecuteQuery connexion;
private ResultSetMetaData md;
private int colonnes;
public Vector data;
private String[] columnNames;
// DefaultTableModel has its own internal storage; use that
public CustomTableModel(String pilote,String host,String login,String pw,String query) {
connexion = new SQLExecuteQuery(pilote,host,login,pw);
connexion.setQuery(query);
getHSQLdb();
}
public void getHSQLdb() {
try {
ResultSet rs = connexion.getResultSet();
md = rs.getMetaData();
colonnes = md.getColumnCount();
System.out.println(colonnes);
columnNames = new String[colonnes];
for (int i = 0; i <= colonnes-1; i++) {
columnNames[i] = md.getColumnLabel(i+1);
super.addColumn(columnNames[i]);
}
// Get all rows.
System.out.println("Data:");
data = new Vector();
while (rs.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= getColumnCount(); i++) {
newRow.addElement(rs.getObject(i));
}
data.addElement(newRow);
System.out.println(data);
}
super.addRow(data);
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
Vector vect = (Vector)data.elementAt(row);
System.out.println(vect.elementAt(col));
return vect.elementAt(col);
}
public boolean isCellEditable(int row,int column) {
return true;
}
// let's use DefaultTableModel's own getRowCount implementation
// and getValueAt
// there is no clear method, so let's add this one
public void clear() {
// setting the number of rows to 0 also clears the model
setRowCount(0);
}
}
A voir également:
[jTable & HSQLDB] 1 seule ligne de la table affichée qui en contient plusieurs
manlap
Messages postés17Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention28 juin 2010 2 juin 2009 à 14:53
Bonjour,
super.addRow(data) permet d'ajouter une seule ligne
il faudrait plutôt faire
// Get all rows.
System.out.println("Data:");
while (rs.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= getColumnCount(); i++) {
newRow.addElement(rs.getObject(i));
}
super.addRow(newRow);
}
ou alors utiliser la méthode setDataVector de DefaultTableModel
Morpheusyz
Messages postés11Date d'inscriptionlundi 21 mars 2005StatutMembreDernière intervention11 juin 2009 10 juin 2009 à 16:33
Merci en effet le problème venait du fait que le addRow se situait en dehors de la boucle while:
J'ai résolu mon problème avec ceci:
// Get all rows.
data = new Vector();
while (rs.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= getColumnCount(); i++) {
newRow.addElement(rs.getObject(i));
}
data.addElement(newRow);
}