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] Masque de saisie d'heure


Sujet :

Composants Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 45
    Points
    45
    Par défaut [JFormattedTextField] Masque de saisie d'heure
    j'ai une appli dans laquelle j'ai mis un jformattedtextfield sur lequel j'applique un mask ##:## (oui c'est pour des heures )

    j'y ai mis une verification de chaque caracteres à l'aide d'un caretlistener

    en position 0 j'autorise 0-1-2

    en position 1 j'autorise 0-1-2-3 si la position 0=2, sinon j'autorise de 0à9

    en position 2 ya ":" pas besoin de verifier !
    en position 3 j'autorise de 0à5

    en position 4 de 0à9


    seulement voila, ca marche mais ya un tit soucis

    si la position 1 est suppérieure à 5 bah je peux plus rien tapper
    alors je me suis dit : ok on va changer le mask si c'est plus grand que 5

    la encore la sollution marche, mais des que je veux effacer avec backspace, bah comme je suis en position 3 bah il force le chiffre dans le mask et je peux pas effacer, sauf avec del ...

    si quelqu'un a une sollution pour mettre un mask qui ne verifi pas ce qui a deja été tappé avant, ca m'evitera de bidouillé des truc pas possibles ....


    voila mon code
    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
     try {
                mf1.setMask("##:##");
                if (txtDebHf.getCaretPosition() == 0) {
                    mf1.setInvalidCharacters("3456789");
                }
                if ((txtDebHf.getCaretPosition() == 1) &&
                    (txtDebHf.getText().charAt(0) == '2')) {
                    //on est sur la position 2, le premier chiffre est 2, donc au max 3
                    mf1.setInvalidCharacters("456789");
                }
                if ((txtDebHf.getCaretPosition() == 1) &&
                    ((txtDebHf.getText().charAt(0) == '0') ||
                     (txtDebHf.getText().charAt(0) == '1'))) {
                    //le premier chiffre est de 0 ou 1, alors on peut allez jusqu'a 9
                    mf1.setInvalidCharacters("");
                }
                if (txtDebHf.getCaretPosition() == 3) {
                    if ( txtDebHf.getText().charAt(1) > 5) {
                        mf1.setMask("#"+txtDebHf.getText().charAt(1)+":##");
                    }
                    mf1.setInvalidCharacters("6789");
                }
                if (txtDebHf.getCaretPosition() == 4) {
                    mf1.setInvalidCharacters("");
                }
     
            } catch (Exception ex) {
                ex.printStackTrace();
            }

  2. #2
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Pourquoi tu fais pas un JFormattedTextField qui est de la forme ##:##, mais qui ne fait la vérification que lors d'un perte de focus ou lors de l'appui sur une touche ou un bouton de validation?

    Tu récupères ta valeur, tu fais "1ere partie < 24" et "2eme partie < 59".
    J'ai pas essayé, mais ça doit être faisable. Dans mon appli, je saisissais un nombre et je vérifiais sa valeur une fois le tout validé...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 45
    Points
    45
    Par défaut
    le probleme c'est que l'appli est pas pour mon usage, mais pour un usage professionnel pour une ou plusieurs secrétaires

    et quand je vois les problemes qu'elles ont pour des ptits trucs de base, je me dit qu'il vaux mieux verifier la frappe en cours de frappe

    si je verifie apres c'est certes plus simple, mais si elle fait pas gaffe et que se trompe d'horaire, je peux remplacer par un horaire défini...

    je voulais le faire avec le keypress, mais bizarement (a moins que je suis nul) une fois la key press, bah la valeur est deja collée dans le textfield

    je me prend la tete pour 3x rien je sais, mais bon j'aime quand c'est propre pour l'utilisateur et que c'est convivial

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ben si tu fais la verif sur la perte de focus de ton JFormattedTextField, c'est aussi bien il me semble...
    Ta pov secrétaire, rentrera sa valeur, et en changeant de champs, si c'est une valeur erronnée, tu lui balance une fenêtre d'avertissement.

    Tiens au fait, et t'as regardé la classe DateFormat? Peut-etre que tu peux directement utilisé ça pour une saisie correcte d'heure... (mais c'est à vérifier)

  5. #5
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Points : 136
    Points
    136
    Par défaut
    +1

    Je pense que "tes secrétaires" vont être vite frustrées en appuyant sur les touches de voir que rien ne se passe : "msieur msieur mon clavier il est bloqué ! ".

    Alors que si tu leur affiche un label ou un popup si le format est incorrect ca va plus vite et ca les crispera moins.

    D'ailleurs ptite info ... je crois que quand tu enleves le focus au JFormattedTextField, s'il n'a pas le format souhaité il te remet la valeur qu'il y avait avant ... pratique tout de même !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 45
    Points
    45
    Par défaut
    c'est bon j'ai résolu le probleme
    j'ai juste mis ma fonction dans la mauvaise classe et dans le mauvais listener ....

    je pensais devoir faire cette verification dans le caretpostion listener
    finalement je l'ai fait dans le keylistener


    et enfin je pense que la secrétaire serra contente de tapper des heures existantes que de tapper des heures genre 78h et 84min

    maintenant elle peuvent tappé de 00:00 à 23:59
    yaura ni 27:30 ni 14:94 par exemple
    dire que j'y ai passé 2 jours complet a cette fonctionnalité

  7. #7
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Points : 136
    Points
    136
    Par défaut
    Bravo ... deux jours mais t'obtiens un résultat tout de même ^^ C'est bien.

    Au passage ta secrétaire aurait pu taper 27:30 ou 14:94 mais le JFormattedTextField aurait repris son ancienne valeur (par exemple 00:00) au moment ou elle fait perdre le focus a son JFormattedTextField.

    En tout cas bravo ^^ et bonne continuation

  8. #8
    Membre habitué Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Points : 156
    Points
    156
    Par défaut
    Et est ce que ta solution permet aussi de gérer une saisie incorrecte avec un copier/coller ?

    La javadoc propose une autre solution pour gérer les vérifs dans les text fields : définir un modèle de document que l'on associe au text field.

    Voici un extrait qui peut t'intéresser :
    Customized fields can easily be created by extending the model and changing the default model provided. For example, the following piece of code will create a field that holds only upper case characters. It will work even if text is pasted into from the clipboard or it is altered via programmatic changes.
    et l'exemple de code correspondant :
    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
     
     public class UpperCaseField extends JTextField {
     
         public UpperCaseField(int cols) {
             super(cols);
         }
     
         protected Document createDefaultModel() {
     	      return new UpperCaseDocument();
         }
     
         static class UpperCaseDocument extends PlainDocument {
     
             public void insertString(int offs, String str, AttributeSet a) 
     	          throws BadLocationException {
     
     	          if (str == null) {
     		      return;
     	          }
     	          char[] upper = str.toCharArray();
     	          for (int i = 0; i < upper.length; i++) {
     		      upper[i] = Character.toUpperCase(upper[i]);
     	          }
     	          super.insertString(offs, new String(upper), a);
     	      }
         }
     }
    J'ai déjà utilisé ce mécanisme pour filtrer le texte entré dans un text field, ça marche très bien.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 45
    Points
    45
    Par défaut
    non pour le copier coller ca ne marche pas

    mais si je me met a la place de la secretaire qui souvent ne connais pas le raccourci ctrl + c et qui utilise clique droit ..

    deja clique droit que la zone text = rien

    ensuite meme si elle connais le raccourci je vois mal la secretaire s'amuser a ecrire l'heure ailleur pour la coller dans l'appli...


    a la base le soft est pour inscrire des personnes dans association
    donc elle obtiendra les informations directement de future membres qui veulent s'inscrire, donc pas besoin de copier/coller

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

Discussions similaires

  1. Type de données DATE/HEURE et masque de saisie
    Par Frankoy dans le forum Modélisation
    Réponses: 4
    Dernier message: 22/02/2011, 18h35
  2. Masque de saisie heure / Mask Time field
    Par youss20 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/06/2010, 14h56
  3. [AC-2007] masque de saisie pour date et heure (ensemble)
    Par lbar012001 dans le forum IHM
    Réponses: 0
    Dernier message: 16/06/2010, 15h57
  4. masque de saisie pour heure:minute:seconde
    Par damien92 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/10/2007, 16h28
  5. Masque de saisie heure
    Par adamess dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 06/02/2007, 16h52

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