cs_coucounet
Messages postés83Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention16 février 2005
-
17 mai 2004 à 17:42
nanou -
9 févr. 2018 à 14:56
Salut à tous je voulais savoir pourquoi les cellules de ma Jtable ne peuvent pas être éditables.
Je m'explique; voici ci-dessous un bout de code de ma Table Model. Je voudrais que les deux dernières colonnes de ma jTable soient éditables (les colonnes 6 et 7).
Ce qu'il se passe : Je peux ecrire dans mes colonnes, mais dès que le curseur va ailleurs (sur une autre case par exemple) tout ce qu'il y a dans la cellule disparait!!!!
Ma jTable est initialisée avec une requete sur une base de données MySQL. Ceci dit je ne pense pas que le problème vienne de là!
/**
* Returns false. This is the default implementation for all cells.
* Except for column 7 & 8 : return true.
* @param rowIndex the row being queried
* @param columnIndex the column being queried
* @return false if columIdex < 7
* @return true if columIdex > 6
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex > 6) return true;
else return false;
}
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20118 18 mai 2004 à 10:26
c'est vrai que j'ai pas été super clair :)
Ton model hérite de quelle classe AbstractTableModel ou DefaultTableModel ?
Si c'est la 1ère tu dois l'implémenter et faire le travail nécessaire. Si c'est la 2nde normalement ça doit marcher tout seul
cs_coucounet
Messages postés83Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention16 février 2005 18 mai 2004 à 15:00
J'ai bien un problème; j'explique ma démarche:
Premièrement : je me suis dis je vais copier la méthode setValueAt() du DefaultTableModel et l'insérer dans ma classe qui extends de AbstracTableModel. Je me suis rapidement apperçu qu'il me manquait plein de méthode et qu'il faudrait que je copie la moitié des méthodes de DefaultTableModel à l'abstractTableModel ...
Deuxièmement : je me suis dis que plutot que tout copier, autant etendre ma class du DefaultTableModel plutot que du AbstractTableModel (pas bête ??? ;-)
Malheureusement les méthodes ne sont pas construites de la même façon. Voici ma méthode getRowCount() qui compte le nombre de lignes qu'il y a dans ma requete MySQL:
/**
* Returns the number of rows in this data table.
* @return the number of rows in the model
*/
public int getRowCount(){
int i = 0;
try {
ResultSet rs = connexion.getResultSet();
rs.last();
i = rs.getRow();
}
catch(SQLException e){
System.out.println(e);
}
return i;
}
et voici le code du DefaultTableModel :
/**
* Returns the number of rows in this data table.
* @return the number of rows in the model
*/
public int getRowCount() {
return dataVector.size();
}
Voila je suis bien embeté car je n'arrive pas trop à avancer, et c'est vraiment important que je puisse editer ces deux dernières colonnes.
Si quelqu'un a une idée, ... de mon coté je continue de chercher ...
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20118 18 mai 2004 à 21:59
Pour que ton modèle reflète ta base de données, je le ferais hériter de AbstractTableModel et je définirais getValueAt(), setValueAt(), getRowCount(), getColumnCount().
La méthode setValueAt() fait l'insert.
La méthode getValueAt() fait le select (attention aux perfs !!!).
Si j'avais eu à faire ça, j'aurais mis une couche supplémentaire entre le model et la BD qui aurait été chargé de récupérer les données et de les envoyer au model....
cs_coucounet
Messages postés83Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention16 février 2005 19 mai 2004 à 17:46
C'est exactement ce que j'ai fait ... J'ai mon AbstractTableModel et j'ai implementé toutes ces methodes sauf SetValueAt() que je n'arrive pas !! (Plus haut j'ai indiqué ce que j'avais fait).
Est ce que tu pourrais me dire ce qu'il faut mettre dans la methode setValueAt() ?
cs_coucounet
Messages postés83Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention16 février 2005 24 mai 2004 à 17:44
Exact !!!
Merciiiiiiiiiiiiiii! Je faisais déjà un select dans ma méthode getValueAt(), je viens juste de rajouter l'update pour la méthode setValueAt() et ça marche nickel (sauf qu'il faut que je réactualise ma table sinon ça ne s'affihce pas ...)