JTable editable

cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 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;
    }


:question) 8-) 8-) koukounet 8-) 8-) :question)

9 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
17 mai 2004 à 18:40
Salut,

il me semble qu'il faut que tu implémentes la méthode setValueAt() en correspondance avec isCellEditable()
0
cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 février 2005
18 mai 2004 à 10:17
C'est à dire? Tu pourrais m'en dire plus?

Je dois implémenter setValueAt() dans mon TableModel?

merci

:question) 8-) 8-) koukounet 8-) 8-) :question)
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
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
0
cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 février 2005
18 mai 2004 à 13:59
Effectivement ça ne marche pas tout seul parce que j'ai la premiere : AbstractTableModel !!!

Je vais essayer d'implementer setValueAt(), on va bien voir ce que ca donne !!!
Sinon tu peux quand même me laisser le code ?

merci

:question) 8-) 8-) koukounet 8-) 8-) :question)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 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 ...

Merci
:question) 8-) 8-) koukounet 8-) 8-) :question)
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
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....
0
cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 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() ?

merci pour ton aide

:question) 8-) 8-) koukounet 8-) 8-) :question)
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
19 mai 2004 à 20:46
dans setValueAt() je ferais un insert ou update dans la BD.
dans getValueAt() je ferais un select.
Pas tester mais je pense que ça devrait marcher
0
cs_coucounet Messages postés 83 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 16 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 ...)

Je te remercie bcp, ça m'a grandement aidé !

:question) 8-) 8-) koukounet 8-) 8-) :question)
0
esq tu peux m'envoyer le code pour getValueAt()
0
Rejoignez-nous