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 :

[JFormattedTextField] Affiche format date


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut [JFormattedTextField] Affiche format date
    Bonjour,
    Mon JFormattedTextField me permet de saisir une date au format "dd/MM/yyyy".
    Je souhaite vérifier si la saisie est conforme au format.
    Voici le code de ma classe :
    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
    import java.awt.Font;
    import java.awt.event.FocusEvent;
    import java.awt.event.FocusListener;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.swing.JFormattedTextField;
    import javax.swing.JOptionPane;
     
    public class SaisieDate extends JFormattedTextField implements FocusListener{       
     
        private FenetrePrincipale fenetrePrincipale;
        SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
     
        public SaisieDate(SimpleDateFormat formatDate){        
     
            this.setFont(new Font("SANS SERIF", Font.BOLD, 16));
            this.setText("");
            this.setBounds(45, 140, 120, 30);        
            this.setHorizontalAlignment(JFormattedTextField.CENTER);
     
            this.addFocusListener(this);
        }
     
        @Override
        public void focusGained (FocusEvent e){    
     
            this.setText("");
        }    
     
        @Override
        public void focusLost (FocusEvent e){
     
            String dateEntree = getDate();
     
            if(! (dateEntree).equals("")){            
     
                try{    
     
                    Date date = formatDate.parse(dateEntree);                
                    this.setText(date.toString());                
                }
     
                catch(ParseException exception){                
                    JOptionPane.showMessageDialog(fenetrePrincipale, "Mauvais format pour la date !",
                            "Attention", JOptionPane.ERROR_MESSAGE);
                }
            }
        }            
     
        public String getDate(){        
     
            return this.getText();
        }
    }



    Le problème est que la date s'affiche sous le format "wed JUNE 25...".
    De plus si on tape par exemple "24415/151456/214521" le message d'erreur n'est pas renvoyé.

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Pour faire la conversion Date --> String, il faut utiliser la méthode format de la classe DateFormat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String strDate = dateFormat.format(date);
    Pour ton problème d'exception, il faut ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateFormat.setLenient(false);

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Merci pour cette réponse mais ça ne marche pas :
    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
    public void focusLost (FocusEvent e){
     
            String dateEntree = getDate();
     
            if(! (dateEntree).equals("")){            
     
                try{    
     
                    dateEntree = formatDate.format(dateEntree);  
                    formatDate.setLenient(false);
                    this.setText(dateEntree.toString());                
               }
     
                catch(UnsupportedOperationException exception){                
                JOptionPane.showMessageDialog(fenetrePrincipale, "Mauvais format pour la date !",
                "Attention", JOptionPane.ERROR_MESSAGE);
                }
            }
        }

  4. #4
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Normal. Tu ne fais pas ce que j'ai dit et tu as modifié ton catch.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        formatDate.setLenient(false);
        try{
            Date date = formatDate.parse(strDate);
            this.setText(strDate);
        } catch(ParseException exception) {
            // do something
        }
    Lorsque je parlais du format, c'était pour faire l'affichage donc à utiliser dans ton setText. Ce n'est même pas nécessaire ici car la date est déjà au bon format.

    EDIT : De plus, si tu travailles avec des champs formatés, il est préférable d'utiliser : JFormattedTextField qui gère ça tout seul.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    autant utiliser un datepicker plutot que de se faire chier comme tu le fais.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Re,

    Merci ça marche maintenant.
    Il me reste à trouver comment faire pour afficher la bonne année si l'utilisateur saisit par exemple "11/08/08" car là il me met 0008.

    EDIT : c'est bon avec getYear() et setYear() même si c'est obsolète.

    P.S. Je travaille bien avec un JFormattedTextField.

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

Discussions similaires

  1. [EG] Afficher format Date de type Janvier dans graphique
    Par patval dans le forum Outils BI
    Réponses: 2
    Dernier message: 30/11/2012, 22h35
  2. [MySQL] Afficher mes dates MySQL en format "long" francophone
    Par Falcokeo dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/03/2008, 15h33
  3. [Debutant] Afficher une date avec un format short
    Par lilou77 dans le forum BIRT
    Réponses: 12
    Dernier message: 11/01/2007, 09h25
  4. [Dates] Afficher La date au format fr
    Par toure32 dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2005, 23h40
  5. Problème pour afficher un format date dd/MM/yy HH:mm
    Par indy3 dans le forum Hibernate
    Réponses: 5
    Dernier message: 29/03/2005, 10h45

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