Nb de caractère dans un JTextArea

Résolu
Cyberdevil Messages postés 483 Date d'inscription mardi 10 juillet 2001 Statut Membre Dernière intervention 12 juillet 2006 - 12 juil. 2006 à 11:15
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 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

4 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 juil. 2006 à 11:50
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
3
Cyberdevil Messages postés 483 Date d'inscription mardi 10 juillet 2001 Statut Membre Dernière intervention 12 juillet 2006
12 juil. 2006 à 12:55
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
0
Cyberdevil Messages postés 483 Date d'inscription mardi 10 juillet 2001 Statut Membre Dernière intervention 12 juillet 2006
12 juil. 2006 à 12:58
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 juil. 2006 à 13:40
Mais de rien

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

WORA
0
Rejoignez-nous