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 :

Définir le nombre de caractères max d'un JTextField


Sujet :

Composants Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut Définir le nombre de caractères max d'un JTextField
    bonjour,

    j'ai un JTextField et un modèle m de type PlainDocument, j'ai compris comment récupérer les changements sur m mais je vois pas bien comment, par exemple, empêcher l'affichage d'un 11ème dans une chaîne de 10 en utilisant m.
    Quelqu'un aurait-il une idée ?

  2. #2
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Pour ce que ça interesse :

    Faut surcharger la méthode insertString de PlainDocument

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public void insertString(int offset, String str, AttributeSet s) throws BadLocationException {
     
            if (this.getEndPosition().getOffset() > 10) {
                return;
            } else { super.insertString(offset, str, s);}
        }

  3. #3
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Faut surcharger aussi replace sinon tu gères pas tous les cas possibles.

    Perso j'utilise un Document que je fourni au JTextField (j'peux le fournir à une JTextArea, ça donnera le même effet).

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    /**
     * Document with a specified max length.
     * The length is controlled by the MaxLengthDocumentFilter.
     * 
     * @author natha
     */
    public class MaxLengthDocument extends PlainDocument {
     
    	/**
             * Create a Document with a specified max length.
             * 
             * @param maxLength The maximum length permitted in this document.
             */
    	public MaxLengthDocument(int maxLength) {
    		this.setDocumentFilter(new MaxLengthDocumentFilter(maxLength));
    	}
     
    	/**
             * DocumentFilter that won't let a too long string in the document content.
             * Can be used by any Document that have the setDocumentFilter() method.
             * 
             * @author natha
             */
    	public static class MaxLengthDocumentFilter extends DocumentFilter {
     
    		/** Max length autorized for the document */
    		private int maxlength;
     
    		/**
                     * Default Constructor with maxlength if not associated to a JFormattedTextField.
                     * 
                     * @param maxlength
                     */
    		public MaxLengthDocumentFilter(int maxlength) {
    			this.maxlength = maxlength;
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.text.DocumentFilter#insertString(javax.swing.text.DocumentFilter.FilterBypass, int, java.lang.String, javax.swing.text.AttributeSet)
    		 */
    		@Override
    		public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
    			if (text != null && text.length() + fb.getDocument().getLength() > maxlength) {
    				text = text.substring(0, text.length() - (text.length() + fb.getDocument().getLength() - maxlength));
    			}
    			super.insertString(fb, offset, text, attr);
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.text.DocumentFilter#remove(javax.swing.text.DocumentFilter.FilterBypass, int, int)
    		 */
    		@Override
    		public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
    			super.remove(fb, offset, length);
    		}
     
    		/* (non-Javadoc)
    		 * @see javax.swing.text.DocumentFilter#replace(javax.swing.text.DocumentFilter.FilterBypass, int, int, java.lang.String, javax.swing.text.AttributeSet)
    		 */
    		@Override
    		public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
    			if (text != null && text.length() + fb.getDocument().getLength() - length > maxlength) {
    				text = text.substring(0, text.length() - (text.length() + fb.getDocument().getLength() - length - maxlength));
    			}
    			super.replace(fb, offset, length, text, attrs);
    		}
    	}
     
    }

  4. #4
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par natha
    Faut surcharger aussi replace sinon tu gères pas tous les cas possibles.

    Perso j'utilise un Document que je fourni au JTextField (j'peux le fournir à une JTextArea, ça donnera le même effet).
    effectivement, quant je fait un copier coller sur ma chaine par exemple et que celui-ci depasse 10 caractères et bein ya pas de problème ça marche
    Merci pour ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      public void replace(int offset, int l,String str, AttributeSet s) throws BadLocationException {
           if (offset + str.length() > 10) {
               return;
           } else {super.replace(offset, l,str, s);}
        }
    biensur tu peux externaliser 10, merci pour ta réponse, bye

  5. #5
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    De rien.

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

Discussions similaires

  1. Web Service+AJAX : nombre de caractères max
    Par dacid dans le forum Services Web
    Réponses: 6
    Dernier message: 03/03/2011, 17h53
  2. Mot clé : nombre de caractères max ?
    Par sliderman dans le forum Référencement
    Réponses: 7
    Dernier message: 12/01/2009, 12h56
  3. Définir le nombre de caractère d'un texte
    Par yoyotheboss7 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 19/10/2007, 23h28
  4. Problème de nombre de caractères max dans Listbox
    Par jojoestpetit dans le forum Access
    Réponses: 1
    Dernier message: 09/04/2006, 12h39

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