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

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    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 averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    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
    Points : 368
    Points
    368
    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 régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    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 averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    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
    Points : 368
    Points
    368
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    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.

  7. #7
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    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
    Points : 368
    Points
    368
    Par défaut
    Si tu utilises un JFormattedTextField, tu n'as pas besoin de faire de contrôle, il peut l'effectuer pour toi. Tu spécifies ce que tu veux qu'il se passe (REVERT, COMMIT, ...) lorsque le focus est perdu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DateFormat dateFormat = DateFormat.getInstance();
    JFormattedTextField field = new JFormattedTextField(dateFormat);
    field.setValue(new Date());
    field.setFocusLostBehavior(JFormattedTextField.REVERT);
    Si tu veux formater ta date pour l'afficher, je t'ai déjà dit qu'il faut utiliser un DateFormat avec la méthode format.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    String strDate = dateFormat.format(date);
    Si tu veux récupérer l'année pour effectuer des calcul alors il faut passer par un Calendar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.get(Calendar.YEAR);

  8. #8
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Encore merci à toi.

+ 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