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 :

Changer la valeur d'une cellule en édition


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut Changer la valeur d'une cellule en édition
    Bonjour à tous,

    Alors je souhaiterais faire une chose assez simple, j'ai une JTable avec 2 colonnes qui contiennent des dates.
    J'ai redéfini le CellEditor (j'avais des problèmes avec le type Date qui lorsque j'éditais ma valeur considérais qu'elle était au format MM/dd/yyyy, d'où le nouveal éditeur) et le Renderer.

    Tout fonctionne parfaitement à l'exception d'une chose, lorsque j'édite ma cellule voici ce qu'il se passe:

    Valeur affichée dans la cellule AVANT édition: 05/06/2013
    Valeur affichée dans la cellule PENDANT l'édition: Wed Jun 05 19:10:04 CEST 2013

    J'aimerai que pendant l'édition je continue d'afficher 05/06/2013.
    Une idée sur la méthode qui fait ça ?
    Pour info, j'ai redéfini un Renderer et un éditeur pour la classe Date.class.

    Merci d'avance !

  2. #2
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Bonsoir

    Pourquoi ne pas manipuler des String dans les cellules de ta JTable comme ça tu évites tout problème de format et ensuite tu les convertis en Date pour les traitements ?

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    J'y ai pensé... Mais par curiosité est-ce possible ?
    Si vraiment ce n'est pas possible, pourquoi pas... mais je préfèrerais afin de comprendre un peu mieux les rouages du MVC dont est composé Swing !

  4. #4
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Bein tu as raison

    Si je ne me trompes pas puisque tu as redéfinis le CellEditor, as tu essayer avec la méthode "Object getCellEditorValue()" du CellEditor qui retourne la valeur courante de la cellule ?

    techniquement la valeur de la cellule doit être de type Date et sa valeur ressemble à ça "Wed Jun 05 19:10:04 CEST 2013". Donc la récupérer, la formater puis retourner la valeur dans "Object getCellEditorValue()" ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    C'est ce que j'ai fait effectivement !
    Du coup cette méthode me retourne une date qui s'affiche selon mes souhaits dans mon renderer.

    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
    public class DateCellEditor extends DefaultCellEditor
    {
        JTextField textField;
     
        public DateCellEditor(JTextField textField)
        {
            super(textField);
            this.textField = textField;
        }
     
        @Override
        public Date getCellEditorValue()
        {
            Date d = new Date();
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            try
            {
                d = formatter.parse(textField.getText());
            }
            catch (ParseException ex)
            {
                JOptionPane.showMessageDialog(null, "La date fournie n'est pas au format jj/mm/aaa", "Erreur dans le format de la date",
                        JOptionPane.ERROR_MESSAGE);
            }
            finally
            {
                return d;
            }
        }
    }
    Mon CellRenderer (trouvé dans un autre post du forum :-P):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class DateRenderer extends DefaultTableCellRenderer
    {
        DateFormat formatter;
        public DateRenderer()
        {
            super();
            formatter = new SimpleDateFormat("dd/MM/yyyy");
        }
     
        @Override
        public void setValue(Object value) {
            setText((value == null) ? "" : formatter.format(value));
        }
    }
    Et donc quelle méthode serait à redéfinir pour changer cela et obtenir le résultat voulu ?
    Sinon peut-être avec un listener et lorsque que la cellule gagne en éditabilité on change sa valeur ? Ca fait un peu Sioux quand même :-P

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    EUREKA !!!!

    Alors j'ai trouvé ce post qui indique qu'il suffit de surcharger "intelligemment" la méthode "getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)" !

    Du coup cela me donne:

    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
        @Override
        public Component getTableCellEditorComponent(
                JTable table,
                Object value,
                boolean isSelected,
                int row,
                int column)
        {
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            String date = formatter.format(((Date) value));
            final JTextField c = (JTextField) super.getTableCellEditorComponent(
                table,
                date, // edit the text field of Cell
                isSelected,
                row,
                column);
     
            c.selectAll(); // automatically select the whole string in the cell
            return c;
        }
    Et le tour est joué !

  7. #7
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Salut

    ah ok
    merci d'avoir posté la réponse j'étais curieuse de la connaitre

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

Discussions similaires

  1. [XL-2007] Changer la valeur d'une cellule d'un "tableau"
    Par damze00 dans le forum Excel
    Réponses: 1
    Dernier message: 17/06/2014, 18h41
  2. Changer la valeur d'une cellule Access en VBA
    Par ivoratparis dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/06/2013, 09h20
  3. Comment changer la valeur d'une cellule ?
    Par lordatef dans le forum Débuter
    Réponses: 3
    Dernier message: 05/08/2011, 16h26
  4. DataGridView changer la valeur d'une cellule vb2008
    Par chahinaz21 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/11/2009, 16h56
  5. [XL-2003] Changer la valeur d'une cellule en cliquant dessus
    Par Riri80 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/06/2009, 16h57

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