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 :

Récupérer la valeur d'une cellule avant sa modification


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Récupérer la valeur d'une cellule avant sa modification
    Bonjour,

    J'ai un JTable dans lequel une cellule est éditable. Lorsque l'utilisateur saisie une valeur, je teste si elle est correcte et si elle ne l'est pas, je réaffecte à la cellule l'ancienne valeur. Enfin, ça c'est ce que j'aimerai faire
    En effet, grâce à l'ajout d'un TableModelListener au Jtable, je détecte bien la modification de la cellule et j'arrive bien à tester la nouvelle valeur, mais je n'arrive pas à récupérer l'ancienne valeur.
    Peut être faut-il passer par autre chose que le TableModelListener?

    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
     
     private class CellChangedListener implements TableModelListener {
        public void tableChanged(TableModelEvent tableEvent) {
            int column = tableEvent.getColumn();
            int row = tableEvent.getFirstRow();
            if (tableEvent.getType() == TableModelEvent.UPDATE) {
     
                if (column == _colonneSurface){
                //Vérification de la surface indiquée
                Double surfMax =150;
                Double surfIndiquee = (Double) getValueAt(row, column);
                if (surfMax != null && surfIndiquee != null){
                    if (surfMax<surfIndiquee){
                        //Affichage d'une boite de dialogue
                        JOptionPane.showMessageDialog(TableauPanel.this,"La surface ne peut pas être plus grande que " + surfMax);
     
                        //On remet l'ancienne surface
                        Double surfPre = ????
                        _tableau.getModel().removeTableModelListener(this);
                        setValueAt(surfMax,row,column);
                        _tableau.getModel().addTableModelListener(this);
                    }
                 }
               }
                 }
            }
      }


    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il n'y a pas de possibilité avec le TableModelListener : lorsque l'évènement est reçu, la donnée est déjà modifiée dans le modèle. De toute manière, pour tester la modification par un éditeur, on utilise un CellEditorListener, mais là aussi l'évènement est reçu alors que la donnée est déjà modifiée dans le modèle.

    En fait, il faudrait remplacer le TableCellEditor par défaut, par un (tu peux t'inspirer de DefaultCellEditor) pour lequel tu as ajouté un InputVerifier.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    OK, merci.
    Je vais regarder du coté du TableCellEditor alors.
    Merci.

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    Salut,

    Une autre méthode plus simple serait de redéfinir la méthode setValueAt dans ton TableModel, et comme tu gères toi-même dans une liste (par exemple) les valeurs contenues dans ta table, avant de setter la valeur, tu mets un petit check sur la valeur rentrée et si elle n'est pas bonne, et bien tu ne fais rien. Dans le cas où la valeur insérée est bonne par contre, tu remplaces la valeur existante dans ton model par la valeur insérée et tu fais un petit appel à fireTableDataChanged().

    C'est aussi pour ces raisons qu'il est plus pratique de gérer soi-même son modèle de table !

Discussions similaires

  1. [JTable] Récupérer la valeur d'une cellule
    Par yoshï dans le forum Composants
    Réponses: 9
    Dernier message: 28/06/2016, 05h56
  2. Récupérer la valeur d'une cellule du tableur OOo
    Par manubrard dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 22/02/2006, 17h51
  3. [WebForms][DataGrid] Récupérer la valeur d'une cellule...
    Par elbj dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 12/12/2005, 14h00
  4. [C#] [Automation Word] Récupérer la valeur d'une cellule
    Par Ditch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/06/2004, 15h57

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