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 :

[JTextField] Limiter le nombre de caractères


Sujet :

Composants Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut [JTextField] Limiter le nombre de caractères
    Bonjour.

    Jai un JTextField limité en nombres de caractères grace à ma class LimitDocumentPlain :



    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
    public class LimitDocumentPlain extends PlainDocument 
    {
     
    private int limit;
     
    public LimitDocumentPlain(int limit) 
    {
      super();
      setLimit(limit);  // store the limit    
    }
     
     
    public void insertString(int offset, String s, AttributeSet attributeSet) 
    {
      try {
     
        if(this.getLength()>=limit)
          return ;
     
        if(offset < limit) 
        // if we haven't reached the limit, insert the string
        {
            super.insertString(offset,s,attributeSet);
        } // otherwise, just lose the string
     
      }
      catch(BadLocationException e) 
      {}
    }
     
     
    }
    Elle marche très bien, l'utilisateur est bien bloqué quand il entre "manuellement" les caractères. Par contre, en passant par les fonctions standard Ctrl-C puis Ctrl-V, il peut entrer plus de caractères !!
    Comment faire ?

  2. #2
    Membre éprouvé
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Points : 1 246
    Points
    1 246
    Par défaut
    voila un code qu'il te suffit d'ajouter a une classe qui étend JTextField avec l' imports
    import javax.swing.text.*;

    On étend la classe PlainDocument à l'aide de la classe LimitDigitDocument instanciée implicitement par la méthode createDefaultModel()
    Dans mon exemple on vérifie en plus que le caractère est bien un nombre, je sais que c'est une question souvent posée.

    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
     
    protected Document createDefaultModel(){
        return new LimitDigitDocument();
    }
     
    static class LimitDigitDocument extends PlainDocument{
        public void insertString(int off, Strin s, AttributSet a)
    	throws BadLocationException{
    	if(s==null)
    	    return;
    	int limit = 5;
    	char[] c = s.toCharArray();
    	boolean est_un_nombre = true;
    	boolean inferieur_limit = true;
    	if(c.length + getLength() <= limit){
    	    for(int i=0; i<c.length; i++){
    		if(!Character.isDigit(c[i])){
    		    est_nombre = false;
    		    break;
    		}
    	    }
    	}
    	else
    	    inferieur_limit = false;
    	if(inferieur_limit && est_un_nombre)
    	    super.insertString(off, s, a);
    	else
    	    System.out.println("Erreur de saisie!");
     
        }
    }
    bon courage

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut
    Donc en fait, en lisant ton code, j'ai juste à rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( this.getLength() + laChaine.getLength() > limit )
    {
    return ;
    }
    Yop, ca marche nickel. Merci

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

Discussions similaires

  1. Limiter le nombre de caractères d'un JTextField
    Par nabil123456 dans le forum Composants
    Réponses: 0
    Dernier message: 04/05/2015, 10h57
  2. [JTextField]Limiter le nombre de caractères admis
    Par thierrykammi dans le forum Composants
    Réponses: 4
    Dernier message: 13/10/2008, 18h04
  3. [JTextField] Limiter le nombre de caractères
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 17/07/2008, 09h45
  4. [JTextArea] limiter le nombre de caractères
    Par spoutyoyo dans le forum Composants
    Réponses: 5
    Dernier message: 14/09/2007, 15h45
  5. [JTextField] Limiter le nombre de caractères
    Par Sweet2002 dans le forum Composants
    Réponses: 7
    Dernier message: 12/05/2005, 14h29

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