JTable editable

cs_coucounet 83 Messages postés jeudi 24 juillet 2003Date d'inscription 16 février 2005 Dernière intervention - 17 mai 2004 à 17:42 - Dernière réponse :  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)
Afficher la suite 

10 réponses

Répondre au sujet
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 17 mai 2004 à 18:40
0
Utile
Salut,

il me semble qu'il faut que tu implémentes la méthode setValueAt() en correspondance avec isCellEditable()
Commenter la réponse de kirua12
cs_coucounet 83 Messages postés jeudi 24 juillet 2003Date d'inscription 16 février 2005 Dernière intervention - 18 mai 2004 à 10:17
0
Utile
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)
Commenter la réponse de cs_coucounet
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 18 mai 2004 à 10:26
0
Utile
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
Commenter la réponse de kirua12
cs_coucounet 83 Messages postés jeudi 24 juillet 2003Date d'inscription 16 février 2005 Dernière intervention - 18 mai 2004 à 13:59
0
Utile
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)
Commenter la réponse de cs_coucounet
cs_coucounet 83 Messages postés jeudi 24 juillet 2003Date d'inscription 16 février 2005 Dernière intervention - 18 mai 2004 à 15:00
0
Utile
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)
Commenter la réponse de cs_coucounet
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 18 mai 2004 à 21:59
0
Utile
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....
Commenter la réponse de kirua12
cs_coucounet 83 Messages postés jeudi 24 juillet 2003Date d'inscription 16 février 2005 Dernière intervention - 19 mai 2004 à 17:46
0
Utile
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)
Commenter la réponse de cs_coucounet
kirua12 1155 Messages postés samedi 17 janvier 2004Date d'inscription 29 avril 2011 Dernière intervention - 19 mai 2004 à 20:46
0
Utile
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
Commenter la réponse de kirua12
cs_coucounet 83 Messages postés jeudi 24 juillet 2003Date d'inscription 16 février 2005 Dernière intervention - 24 mai 2004 à 17:44
0
Utile
1
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)
esq tu peux m'envoyer le code pour getValueAt()
Commenter la réponse de cs_coucounet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.