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 :

JTextArea, et JScrollPane qui ne scrolle pas automatiquement


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut JTextArea, et JScrollPane qui ne scrolle pas automatiquement
    Bonjour,

    J'ai a un endroit de mon appli une fenêtre avec une text area qui est mise à jour automatiquement. Cette text area est associé à un JScrollPane

    Je souhaiterais que la mise a jour automatique entraine un scroll vers le bas pour constamment voir la dernière ligne ajoutée. Mais au contraire ca reste scotchée vers le haut.

    J'ai suivi l'example de sun :

    http://java.sun.com/docs/books/tutor...mplerDemo.java
    ou par java webstart :
    (http://java.sun.com/docs/books/tutor...mplerDemo.jnlp)

    Lorsque je l'utilise, ca marche bien, a chaque saisie la barre de scroll va vers le bas.

    J'ai modifié l'exemple (voir pièce jointe, il suffit de mettre dans eclipse, ca marche sans aucune dépendance) afin de rajouter un styledDocument sur la text area :

    JTextArea textArea = new JTextArea(doc);

    et j'ai ensuite ajouté un thread qui ajoute du texte a ce document de facon régulière. Je retombe sur mon problème, la barre de scroll reste en haut.

    Quelqu'un a une idée de la bonne méthode ?
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Il me semble que un StyledDocument s'utilise avec un JTextPANE. Si cette remarque te permet pas d'avancer dis le j'essaierai d'approfondir.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 290
    Par défaut
    Je n'arrive pas à faire marcher ton code modifié.
    Cependant, la dernière fois que j'ai utilisé un JTextArea avec un JScrollPane, j'avais le desir inverse: revenir au début. Et J'ai résolu le problème avec un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monJTextArea.setCaretPosition(0);
    Cela serait-il la solution en l'adaptant à ta fin de texte au lieu du début ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je suis peut-être mal réveillé malgré qu'il soit presque 11h... mais je ne trouve pas le code qui devrait déplacer le scrollpane

    a++

  5. #5
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut
    le code qui devrait déplacer l'ascenceur est ligne 347

    c'est ce code la :

    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
     
            Thread t = new Thread(new Runnable(){
     
                public void run()
                {
                    while (true)
                    {
                        SimpleAttributeSet attributes = new SimpleAttributeSet();
                        try
                        {
                            doc.insertString(doc.getLength(), "test" + "\n", attributes);
                            int len = textArea.getText().length();
                            textArea.setCaretPosition(len);
     
                            doc2.insertString(doc2.getLength(), "test" + "\n", attributes);
                            Thread.sleep(1000);
                        } catch (BadLocationException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (InterruptedException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }
            );
            t.start();
    bon mais en fait je viens de relancer ce main et ca fonctionne. C'est mon cas réél qui ne fonctionne pas, du coup je cherche la différence.

    effectivement j'utilise bien le setCaretPosition qui repositionne vers le bas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                            int len = textArea.getText().length();
                            textArea.setCaretPosition(len);
    et c'est une textArea, donc ca doit fonctionner avec ca.

    Je cherche quel est l'écart entre ce code simplifié et le vrai.

  6. #6
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut
    ok je vois la différence, en fait dans le cas réél j'utilise un JTextPane

    Je viens de tester, le coup du setCaretPosition fonctionne parfaitement avec un JTextArea mais pas avec un JTextPane

    Je peux donc utiliser le JTextArea mais du coup je perds les options de mise en forme.

    EDIT : en modifiant TextSamplerDemo.java pour mettre un JTextPane à la place d'un JTextArea et relancer le test, je me rends compte que le setCaretPosition renvoie une exception avec ce composant :

    Exception in thread "Thread-2" java.lang.IllegalArgumentException: bad position: 6
    at javax.swing.text.JTextComponent.setCaretPosition(JTextComponent.java:1398)
    at components.TextSamplerDemo$1.run(TextSamplerDemo.java:350)
    at java.lang.Thread.run(Thread.java:595)

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

Discussions similaires

  1. Encore un scrollPane qui ne scroll pas
    Par Yann39 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/12/2006, 09h41
  2. Réponses: 17
    Dernier message: 24/11/2006, 15h19
  3. [JScrollPane] qui ne veut pas se mettre en haut a gauche
    Par Cyber@l dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/11/2006, 10h41
  4. Un JScrollPane qui ne scrolle pas !
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 30/09/2006, 23h54
  5. service windows qui ne demarre pas automatiquement
    Par youcef81 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 17/07/2006, 08h41

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