Nb de caractère dans un JTextArea [Résolu]

Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Dernière intervention
12 juillet 2006
- - Dernière réponse : Twinuts
Messages postés
5309
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 décembre 2018
- 12 juil. 2006 à 13:40
Bonjour tout le monde !

J'ai un petit problème en java....
En fait j'aimerais savoir le nb de caractère qu'il y a dans un JTextArea en "temps réel" ! Alors j'ai ajouter un keyListener à mon JTextArea mais le problème c'est que quand l'événmenet est généré et ben le caractère n'est pas encore ajouté au JTextArea. Donc si je fais un monTextArea.getText().length() et ben il me manquera un caractère. Et si je fais +1 ca pose problème car admettons que lutilisateur appuise sur backspace ou une flèche et ben ça comptabilisera un caractère faux jusqu'au prochain appui... J'espère que quelqu'un à la solution !

Je vous remerci d'avance

Cyberdevil
http://projects.xwaves.net
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
5309
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 décembre 2018
3
Merci
Salut,


regarde du coté de setDocument et redefinie le Document

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/text/Document.html


il y a pas plus temps reel et tu as la maitrise des insertion et supression de char

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Twinuts
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Dernière intervention
12 juillet 2006
0
Merci
Excellent !

Merci beaucoup ça fonctionne parfaitement.

Pour information:
J'ai redéfini la classe PlainDocument et j'ai réimplémenté les méthode removeUpdate et insertString de cette classe. Dans ces méthode j'incrémente une varaible compteur de caractère. Et je met à jour mon label passé en paramètre dans la méthode constructeur de ma nouvelle classe. Ca donne ça:

public class SMSDocument extends PlainDocument {
   
    JLabel lblStatus;
   
    int nbChar=0;
   
    public SMSDocument(JLabel lblStatus)
    {
        super();
        this.lblStatus=lblStatus;
    }
    protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
    {
        nbChar-=chng.getLength();
        updateLabel();
    }
   
    void updateLabel()
    {

      /* Met à jour le label avec le nb de char */
      /* ... */
    }
   
    public void insertString(int offs,
            String str,
            AttributeSet a)
     throws BadLocationException
     {
        super.insertString(offs, str, a);
        nbChar+=str.length();
        updateLabel();
     }
}

Pour utilisé:

JLabel lbl=new JLabel("Nb char: 0");
JTextArea txt=new JTextArea("");
txt.setDocument(lbl);

Et voila :-) !!

Merci encore twinuts pour cette très bonne idée !

Cyberdevil
http://projects.xwaves.net
Commenter la réponse de Cyberdevil
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Dernière intervention
12 juillet 2006
0
Merci
Oups une petite erreur s'est infiltrée (apparemment ça fonctionne quand meme mais bon):

La méthode removeUpdate doit être celle la et pas celle du message précédent:

    protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
    {
        super.removeUpdate(chng);
        nbChar-=chng.getLength();
        updateLabel();
    }

J'avais oublié l'appel à la méthode originale !

Cyberdevil
Commenter la réponse de Cyberdevil
Messages postés
5309
Date d'inscription
dimanche 4 mai 2003
Dernière intervention
18 décembre 2018
0
Merci
Mais de rien

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.