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

Interfaces Graphiques en Java Discussion :

problème avec un MaskFormatter


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Par défaut problème avec un MaskFormatter
    Bonjour,

    j'ai un JFormattedTextField associé à un MaskFormatter pour limiter le nombre de caractère à 4 et permettre seulement la saisie de chiffres, comme ceci ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaskFormatter nombres = new MaskFormatter("####");
    Le problème est que le MaskFormatter oblige à saisir 4 chiffres.

    Hors, moi je voudrais simplement limiter le nombre de saisies à 4 : on pourrais alors entrer 1, 2 , 3 ou 4 chiffres.

    Comment faire ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new InternationalFormatter(new DecimalFormat("####"));

    Sinon, tu étends toi même AbstractFormatter et tu crée tes propres méthode stringToValue et valueToString

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Par défaut
    J'ai réussi en faisant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nombres = new MaskFormatter("****");
    nombres.setPlaceholder("123456789 ");
    Du coup, j'autorise les chiffres et l'espace.

    Et quand je récupère le nombre saisi, je supprime les espaces avec la fonction trim() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String codeSaisie = mon_JFormattedTextField.getText().trim();
    En revanche la fonction setPlaceholder affiche "1234" dans mon JFormattedTextField à l'ouverture de ma fenêtre.
    Pour avoir un affichage vide, j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_JFormattedTextField.setText("");
    Mais ça rempli alors mon JFormattedTextField d'espaces et ça oblige l'utilisateur à positionner correctement le curseur pour pouvoir entrer les 4 chiffres (avant les espaces).
    Si il place le curseur après, il ne peut alors plus entrer de chiffres.

    Et de plus, je n'arrive pas à afficher le curseur dans mon JFomattedTextField à l'ouverture de ma fenêtre.
    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_JFormattedTextField.requestFocusInWindow();
    Et ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mon_JFormattedTextField.setFocusable(true);
    mon_JFormattedTextField.requestFocus();
    Sans succès...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Par défaut
    Peut-on supprimer l'affichage du Placeholder dans le JFormattedTextField ?

    Comment afficher le curseur dans mon JFomattedTextField à l'ouverture de ma fenêtre ?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Par défaut
    J'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nombres = new MaskFormatter("****");
    nombres.setPlaceholder("123456789 ");
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nombres = new MaskFormatter("****");
    nombres.setValidCharacters("123456789 ");
    Néanmoins, j'ai toujours 4 espaces qui s'affiche dans mon JFormattedTextField à l'ouverture de la fenêtre, ce qui oblige l'utilisateur à faire attention où il place le curseur...

    Car je n'arrive toujours pas à afficher le curseur dans mon JFormattedTextField à l'ouverture de la fenêtre, malgré l'utilisation de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mon_JFormattedTextField.requestFocusInWindow();
     
    // Ou encore 
     
    mon_JFormattedTextField.setFocusable(true);
    mon_JFormattedTextField.requestFocus();
    J'ai également essayé en plaçant ces instructions une fois tous les objets de ma fenêtre construits...

    Quelqu'un aurait une autre solution ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Par défaut
    Pour ceux que ça pourrait intéresser, j'ai finalement réussit à mettre le curseur dans mon JFormattedTextField à l'ouverture de la fenêtre en désactivant le focus de mon panneau, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_tabbedPane.setFocusable(false);
    J'ai toujours les 4 espaces affichés dans mon JFormattedTextField et pour éviter les erreurs de saisie je repositionne le curseur à la position 0 à chaque clic dans mon JFormattedTextField, comme ceci, faute de pouvoir faire mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mon_JFormattedTextField.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent arg0)
      {
        mon_JFormattedTextField.setCaretPosition(0);
      }
    });

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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