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 :

Masquer une partie du texte seulement


Sujet :

Composants Java

  1. #1
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut Masquer une partie du texte seulement
    Bonjour,
    Dans un JTextField, je souhaite masquer une partie du texte, par exemple les 3 premiers ou les 4 derniers caractères, pour un n° de carte de crédit, par example.
    JPasswordfield ne permet pas de masquer seulement certains caractères.
    Existe t-il une solution ?
    D'avance merci.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Salut,

    je ne suis pas du tt spécialiste de Swing mais je suppose que tu peux dans un composant héritant de JTextField surcharger paintComponent() et modifier le texte le temps du rafraîchissement genre:

    A voir avec les pros s'il n'y a pas des effets de bord ou mieux a faire.

    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
    private static class CustomInputField extends JTextField {
     
            /**
             * 
             */
            private static final long serialVersionUID = 1L;
     
            @Override
            protected void paintComponent(Graphics g) {
                final String value = getText();
                setText(value.replaceAll("\\d", "*"));
                super.paintComponent(g);
                setText(value);
            }
     
        }

  3. #3
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Bonjour,

    Si tu ne trouves pas de solution simple, tu peux toujours mettre 3 JPasswordField de 4 caractères, suivi d'un JTextField de 4 caractères.

    En ajoutant un actionListener sur tes JPasswordField pour donner le focus au champ suivant lorsque le 4e caractère est tapé (un peu comme pour la plupart des installers, quand il faut taper une clé-CD par exemple).

    C'est un peu moins maniable mais bon...
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    bonjour,

    voici un début. Je personnalise un JTextField en implémentant une classe PlainDocument().
    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
    56
     
    public class CustomTextField extends JTextField
    {   
        public CustomTextField()
        {
            super();
        }
     
        public CustomTextField(String value)
        {
            super(value);
        }    
     
        @Override
        protected Document createDefaultModel()
        {
            return new FileCaseDocument();
        }
     
        static class FileCaseDocument extends PlainDocument
        {
            final int CHARS_TO_HIDE = 4;
            int i;
            char charArray[];
     
            @Override
            public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
            {
                if (str == null)
                {
                    return;
                }
     
                if (str.length() == 1 && offs < CHARS_TO_HIDE)
                {
                    str = "*";
                }
     
                // pour gérer le copier coller
                if (str.length() > 1)
                {
                    charArray = str.toCharArray();
                    i = 0;
                    while (i < charArray.length && i < CHARS_TO_HIDE)
                    {
                        charArray[i] = '*';
                        i++;
                    }
                    str = String.valueOf(charArray);
                }
     
                super.insertString(offs, str, a);     
     
            }
        }
    }
    Lorsque offs est inférieur à 4 je remplace le caractère entré par une étoile (*).
    Trois inconvénients
    - le copier-coller est mal géré si le texte est collé alors que le champ contient déjà quelque chose ;
    - si tu insères un caractère au milieu des étoiles, il se transforme en étoile mais le caractère suivant la 4ème étoile ne se transforme pas en nombre ;
    - le contenu réel du champ n'est pas mémorisé.

Discussions similaires

  1. [VBA][Excel]Supprimer une partie du texte d'une grosse liste
    Par annedeblois dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2005, 17h15
  2. Selectionner par javascript une partie de texte
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/06/2005, 16h53
  3. Masquer une partie du formulaire
    Par Neuromancien2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/01/2005, 14h23
  4. Réponses: 2
    Dernier message: 09/10/2004, 20h45
  5. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38

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