IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

modifier une cellule d'une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Par défaut modifier une cellule d'une JTable
    Bonjour à tous,
    J'ai un problème que je vous soumet afin d'avoir une solution. Dans mon programme, j'ai une JTable à la quelle je peut ajouter ou supprimer une ligne sans problème.Ma table est construite à partir d'un AbstractModel. J'ai une colonne qui est éditable et je veux laisser la possibilité de modifier les cellules de cette colonne. Je veux que cette modification soit automatiquement prise en compte par mon modèle. Je ne sais pas comment procéder si quelqu'un à une solution à me proposer. Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah à partir du moment ou ton modèle redéfinit correctement la méthode setValueAt(Object value,int row, int col) je ne vois pas pourquoi ça ne marcherait pas...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Par défaut
    Bonjour,
    Merci Sinok, j'ai la méthode setValueAt(Object value,int row, int col) qui est bien définie.Mais ça ne marche pas. Ma table est vide au départ. C'est à l'utilisation qu'on la rempli à parti des éléments contenu dans un comboBox.Pour l'ajout d'une ligne ou la suppression aucun soucis. Je veux laisser la possibilité de modifier une cellule et qui doit être prise en compte automatiquement. Lorsque je modifie ma cellule et que je quitte la cellule l'ancienne valeur est remise. Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        public class ModeleCorrespondance extends AbstractTableModel{
     
     
        private ArrayList<CorrespondanceActionTache> listeLigne;    
        private String[] nomCol;
       public ModeleCorrespondance(ArrayList<CorrespondanceActionTache> listeLigne,String[] col){
            this.listeLigne=listeLigne;
            this.nomCol=col;
     
     
        }
     
        /**
             * Méthode abstraite dans AbstractTableModel : nombre de lignes de la table
        */
        public int getRowCount() {
            return this.listeLigne.size();
        }
        /**
         * Méthode abstraite dans AbstractTableModel : nombre de colonnes de la table
         */
        public int getColumnCount() {
            return this.nomCol.length;
        }
        /*
          lES LIGNE SONT EDITABLE OU PAS
         */
      /* public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }*/
     
        public String getColumnName(int col) {
            return this.nomCol[col].toString();
        }
     
     
        public boolean isCellEditable(int ligne, int colonne) {
            return colonne==0;
        }
        /**
     
         * Méthode abstraite dans AbstractTableModel : récupération du contenu d'une cellule
         *
         */
        public Object getValueAt(int rowIndex, int columnIndex) {
            CorrespondanceActionTache ligne = this.listeLigne.get(rowIndex);
            Object o = null;
            switch (columnIndex) {
                case 0:
                    o = ligne.action;
                    break;
                case 1:
                    o = ligne.id;
                    break;
     
            }
            return o;
        }
        public void setValueAt(String val,int rowIndex, int columnIndex) {
     
            this.listeLigne.get(rowIndex).action=val;        
            fireTableCellUpdated(rowIndex,columnIndex);
        }
        public void addRow(CorrespondanceActionTache ligne) {
            // Ajout au Vector et tri
            this.listeLigne.add(ligne);
            this.fireTableDataChanged();
        }
     
     
        public void supprimerLigne(int ligne){        
            this.listeLigne.remove(ligne);
            this.fireTableDataChanged();
        }

  4. #4
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Qu'est ce qui ne marche pas ?
    Après avoir ajouté une ligne, l'utilisateur modifie la combo qui est dans cette ligne mais le SetValue n'est pas déclenché c'est ça ?
    Si c'est le cas, le SetValue est déclenché parce que la table reçoit un event editingStopped. Elle le reçoit soit parce que tu le déclenches, soit parce que la cellule éditée perd le focus. Donc si tu veux que dès que l'utilisateur ait fait une sélection dans la combo son choix soit pris en compte le mieux est de mettre un propertyChangeListener sur ta ComboBox et quand tu reçois l'event tu fais un stopCellEditing() dans ton editor. Cela, in fine, déclenchera le SetValue.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Par défaut
    Merci beaucoup à tous
    J'ai fait cette modification et maintenant ça marche

    public void setValueAt(String val,int rowIndex, int columnIndex)

    public void setValueAt(Object val,int rowIndex, int columnIndex)
    En fait moi j'utilise des String donc je voulais pas faire la conversion du paramètre val. Voilà pourquoi je le déclarait en String. Mais avoir modifié.Mon programme marche maintenant. Je ne sais pas vraiment celà est dû à quoi. Peut être que quelqu'un pourrait m'expliquer.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par shakoulé Voir le message
    Merci beaucoup à tous
    J'ai fait cette modification et maintenant ça marche

    public void setValueAt(String val,int rowIndex, int columnIndex)

    public void setValueAt(Object val,int rowIndex, int columnIndex)
    En fait moi j'utilise des String donc je voulais pas faire la conversion du paramètre val. Voilà pourquoi je le déclarait en String. Mais avoir modifié.Mon programme marche maintenant. Je ne sais pas vraiment celà est dû à quoi. Peut être que quelqu'un pourrait m'expliquer.
    Cela vient tout simplement du fait que la JTable cherche dans le modèle une méthode dont la signature prend un objet en paramètre. Pas une méthode prenant un String en paramètre. Celle ci n'a aucun intérêt pour la JTable car elle ne fait pas partie du contrat défini par l'interface TableModel sur laquelle s'appuie la JTable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo