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] taille limite


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    453
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 453
    Par défaut [JTextField] taille limite
    Salut a tous j'ai un soucis,
    j' ai un champ textuel (jtextfield) je veux que la taille du cette champ soit limité à 6à caractéres et que s'il dépasse le 59 caractéres une message automatique va afficher en l'indiquant qu'il ne doit pas dépasser le 6à caractéres ,puis en cliquant sur une bouton ok cette utilisateur ne peut que supprimer des caractéres et ne peut pas ajouter autres caractéres .
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, il faut utiliser la méthode setColumns(N) pour limiter la taille à N caractères.
    Ensuite avec un InputMethodListener tu pourras savoir quand la valeur du texte a changé et atteind la longueur maximum pour afficher ta popup.

    ps : je trouve ta popup peu ergonomique. En général on indique la longueur max d'un JTextField juste à côté de la zone de saisie et on bloque le JTextField à N caractères, ça suffit. Mais ça n'engage que moi

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Par défaut
    T'es sûr que le setColumns(N) fonctionne ? Chez moi je peux tout de même écrire 20 caractères sans soucis...

  4. #4
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    pour que ça fonctionne même en cas de copié collé ceci marche bien

    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
    57
    58
     
     
    import java.awt.Toolkit;
     
    import javax.swing.JTextField;
    import javax.swing.text.AbstractDocument;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.DocumentFilter;
     
    /**
    * TextField that can be limited in size (max number of characters typed in)
    * @author oma
    *
    */
    public class LimitedTextField extends JTextField {
     
    public LimitedTextField(int maxLength)
    {
    super();
    AbstractDocument doc = (AbstractDocument) getDocument();
    doc.setDocumentFilter(new TextLimiter(maxLength));
    }
     
    /**
    * Text limiter used to limit the number of characters of text fields
    * Should be used this way :
    *
    * AbstractDocument doc = (AbstractDocument) myTextComponent.getDocument();
    doc.setDocumentFilter(new TextLimiter(maxLength));
    *
    * @author oma
    *
    */
    private class TextLimiter extends DocumentFilter {
    private int max;
     
    public TextLimiter(int max) {
    this.max = max;
    }
     
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr) throws BadLocationException {
     
    replace(fb, offset, 0, str, attr);
    }
     
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
    int newLength = fb.getDocument().getLength() - length + str.length();
     
    if (newLength <= max) {
    fb.replace(offset, length, str, attrs);
    } else {
    Toolkit.getDefaultToolkit().beep();
    }
    }
    }
     
    }

  5. #5
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Oups désolé...setColumns ne limite effectivement pas le nombre de caractères mais permet de calculer la longueur initiale du champ... la boulette...

    edit : et je viens de lire ta signature jojo...

  6. #6
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    perso j'utilise çà :

    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
    57
    58
    59
    public class TStringField extends JTextField
    {
        private int limite = 10;
     
        public TStringField()
        {    
        }
     
        public TStringField(int limite)
        {
            this.limite = limite;
            changeLimite();
        }
     
        public void setLimite(int limite)
        {
            this.limite = limite;
            changeLimite();
        }
     
        private void changeLimite()
        {
            setDocument(new limiteDigitDocument(this.limite));
        }
     
        @Override
        public void setText(String txt)
        {
            if(txt.length() > this.limite)
            {
                super.setText(txt.substring(0, this.limite));
            }
            else
            {
                super.setText(txt);
            }
        }
     
        static class limiteDigitDocument extends PlainDocument
        {
            private int limite;
     
            public limiteDigitDocument(int limite)
            {
                super();
                this.limite = limite;
            }
     
            @Override
            public void insertString (int off, String s, AttributeSet a) throws BadLocationException
            {
                if ((s.length() + getLength() > limite) || (s == null))
                {
                    return;
                }
                super.insertString(off, s, a);
            }
        }
    }

  7. #7
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Par défaut
    Oui donc pour résumer y'a rien de tout simple, faut obligatoirement passer par la construction d'une classe....

Discussions similaires

  1. [MySQL4.1.12]Taille limite du type Longblob
    Par perlgirl dans le forum SQL Procédural
    Réponses: 12
    Dernier message: 19/12/2005, 15h02
  2. Textarea : Taille limite ?
    Par Mr N. dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2005, 17h40
  3. [debutant]Taille limité Oracle 9.2.0.6
    Par Carlito_superheros dans le forum Oracle
    Réponses: 3
    Dernier message: 18/10/2005, 19h32
  4. [String] Taille limite ?
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2005, 11h50
  5. taille limite d'une priority_queue
    Par traiangueul dans le forum SL & STL
    Réponses: 3
    Dernier message: 26/08/2004, 17h19

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