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 :

Validation d'une cellule


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
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut Validation d'une cellule
    Bonjour,

    mon problème est le suivant :
    j'ai un Jtable avec un nombre de cellule n.
    je lui ai associé un model spécifique que j'ai créé.

    Dans ce modèle j'ai surchargé la méthode de la classe mère
    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
     
    @Override
      public void setValueAt(Object p_Value, int p_iRowIndex, int p_iColumnIndex) {
        // ---------------------------------------------------------------------
        // Declaration de variables necessaires
      //-----------------------------------------------------------------------
        Cell cell = null;
     
        // ---------------------------------------------------------------------
        // on verifie avant que les valeurs sont des double
        // ---------------------------------------------------------------------
        if (m_MapValueAt != null) {
          m_Table = (JTable) getTableModelListeners()[0];
          // ------------------------------------------------------------------
          // on recupere la valeur saisie
          // ------------------------------------------------------------------
          cell = m_MapValueAt.get(p_iColumnIndex);
     
          if (cell != null) {
            try {
              if (p_Value instanceof Number) {
     
             //------------------------------------------------------------------
                // on test la valeur min et max
             //------------------------------------------------------------------
                checkValue(cell, (Number) p_Value);
     
             //------------------------------------------------------------------
                // on formatte la valeur
             //------------------------------------------------------------------
                if (p_Value instanceof Double) {
                  super.setValueAt(FormatTools.formatValueDouble((Double) p_Value,
                      cell.getNbDecimal()), p_iRowIndex, p_iColumnIndex);
                }
                else {
                  super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
                }
              }
            }
            catch (NumberFormatException e) {
              // ----------------------------------------------------------------
              // Affichage de l'erreur
              // ----------------------------------------------------------------
     
            }
          }
          else {
            super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
          }
        }
        else {
          super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
        }
      }
    Ma question est la suivante : lorsque qu'une exception est levée je ne fais rien du coup l'ancienne valeur remplace la nouvelle valeur saisie.

    Ce système ne me plait qu'à moitié, je préférerais que la cellule reste active avec le curseur dans la cellule, seulement je n'arrive pas à laisser le focus et la cellule editée.

    Si vous pouviez m'aider merci beaucoup.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    Personne n'a une idée ?? ou même une suggestion ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    Bon ben j'ai trouvé la solution, grâce à un post de l'un d'entre vous sur le forum

    Pour résumer, j'utilise un thread qui va se déclencher après la mise à jour des cellules, du coup je réédite ma cellule et je met en surbrillance l'erreur.

    Merci pour la solution


    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
     
    @Override
      public void setValueAt(Object p_Value, int p_iRowIndex, int p_iColumnIndex) {
        // ---------------------------------------------------------------------
        // Declaration de variables necessaires
      //-----------------------------------------------------------------------
        Cell cell = null;
     
        // ---------------------------------------------------------------------
        // on verifie avant que les valeurs sont des double
        // ---------------------------------------------------------------------
        if (m_MapValueAt != null) {
          m_Table = (JTable) getTableModelListeners()[0];
          // ------------------------------------------------------------------
          // on recupere la valeur saisie
          // ------------------------------------------------------------------
          cell = m_MapValueAt.get(p_iColumnIndex);
     
          if (cell != null) {
            try {
              if (p_Value instanceof Number) {
     
             //------------------------------------------------------------------
                // on test la valeur min et max
             //------------------------------------------------------------------
                checkValue(cell, (Number) p_Value);
     
             //------------------------------------------------------------------
                // on formatte la valeur
             //------------------------------------------------------------------
                if (p_Value instanceof Double) {
                  super.setValueAt(FormatTools.formatValueDouble((Double) p_Value,
                      cell.getNbDecimal()), p_iRowIndex, p_iColumnIndex);
                }
                else {
                  super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
                }
              }
            }
            catch (NumberFormatException e) {
              // ----------------------------------------------------------------
              // Affichage de l'erreur
              // ----------------------------------------------------------------
              super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
              SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                  m_Table.editCellAt(p_iRowIndex, p_iColumnIndex);
                  m_Table.getEditorComponent().requestFocus();
     
                  TableCellEditor editor = m_Table.getCellEditor(p_iRowIndex,
                      p_iColumnIndex);
     
                  Component editorComp = m_Table.prepareEditor(editor, p_iRowIndex,
                      p_iColumnIndex);
     
                  if (editorComp instanceof JTextField) {
                    JTextField field = (JTextField) editorComp;
                    field.setBorder(BorderFactory.createLineBorder(Color.red));
                    field.selectAll();
                  }
                }
              });
            }
          }
          else {
            super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
          }
        }
        else {
          super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
        }
      }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    J'ai noté une petite erreur dans le code fourni, lorsque l'on appuie sur la touche Echap, ou le bouton ok la valeur était enregistrée.

    Pour corriger ce problème j'ai remplacé le
    super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
    par field.setText(p_Value.toString());

    donc la valeur saisie est toujours affichée, en revanche la valeur dans le tableau elle n'a pas changé, c'est un peu subtile lol mais cela fonctionne très bien.

    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
     
    @Override
      public void setValueAt(Object p_Value, int p_iRowIndex, int p_iColumnIndex) {
        // ---------------------------------------------------------------------
        // Declaration de variables necessaires
      //-----------------------------------------------------------------------
        Cell cell = null;
     
        // ---------------------------------------------------------------------
        // on verifie avant que les valeurs sont des double
        // ---------------------------------------------------------------------
        if (m_MapValueAt != null) {
          m_Table = (JTable) getTableModelListeners()[0];
          // ------------------------------------------------------------------
          // on recupere la valeur saisie
          // ------------------------------------------------------------------
          cell = m_MapValueAt.get(p_iColumnIndex);
     
          if (cell != null) {
            try {
              if (p_Value instanceof Number) {
     
             //------------------------------------------------------------------
                // on test la valeur min et max
             //------------------------------------------------------------------
                checkValue(cell, (Number) p_Value);
     
             //------------------------------------------------------------------
                // on formatte la valeur
             //------------------------------------------------------------------
                if (p_Value instanceof Double) {
                  super.setValueAt(FormatTools.formatValueDouble((Double) p_Value,
                      cell.getNbDecimal()), p_iRowIndex, p_iColumnIndex);
                }
                else {
                  super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
                }
              }
            }
            catch (NumberFormatException e) {
              // ----------------------------------------------------------------
              // Affichage de l'erreur
              // ----------------------------------------------------------------
              //super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
              SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                  m_Table.editCellAt(p_iRowIndex, p_iColumnIndex);
                  m_Table.getEditorComponent().requestFocus();
     
                  TableCellEditor editor = m_Table.getCellEditor(p_iRowIndex,
                      p_iColumnIndex);
     
                  Component editorComp = m_Table.prepareEditor(editor, p_iRowIndex,
                      p_iColumnIndex);
     
                  if (editorComp instanceof JTextField) {
                    JTextField field = (JTextField) editorComp;
                    field.setBorder(BorderFactory.createLineBorder(Color.red));
                    field.setText(p_Value.toString());
                    field.selectAll();
                  }
                }
              });
            }
          }
          else {
            super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
          }
        }
        else {
          super.setValueAt(p_Value, p_iRowIndex, p_iColumnIndex);
        }
      }

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

Discussions similaires

  1. [Débutant] Validation d'une cellule dans un dataGrid
    Par Amine38 dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 12/06/2012, 14h00
  2. Macro après validation d'une cellule
    Par sony25 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/10/2011, 21h29
  3. DataGridView Déclencher la validation d'une cellule
    Par Laur3nT dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/08/2010, 09h34
  4. Réponses: 12
    Dernier message: 05/03/2007, 11h52
  5. executer une macro apres validation d'une cellule
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/01/2007, 19h20

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