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

AWT/Swing Java Discussion :

[JTextArea]Info sur l'affichage


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut [JTextArea]Info sur l'affichage
    Bonjour,

    Etant dans l'impossibilité de tester (je suis en déplacement), mes méninges continuent néanmoins de travailler sur un projet en démarrage.
    Je souhaiterais savoir :
    - un JTextArea (de petite taille en hauteur) est alimenté en String \n, une par une, avec 1 seconde entre chaque ajout de String
    - ce JTextArea est dans un JScrollPane,

    L'utilisateur aurra-t-il à chaque fois les yeux sur la dernière ligne ajoutée ?
    Ou bien les lignes s'ajoutent dans le JTextArea y comprit dans la partie "non-visible" et l'utilisateur devra faire jouer la barre de défilement pour lire les dernières lignes ?
    (Dans ce dernier cas comment faire pour que la dernière ligne soit celle que l'utilisateur voit en continue sans action de sa part)

    Merci pour l'info.

    Régis. ;-)

  2. #2
    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,


    Il te suffit de déplacer le JScrollPane tout en bas de la zone d'affichage...

    Le code suivant devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textArea.scrollRectToVisible( textArea.modelToView(textArea.getDocument().getLength()) );
    A exécuter dans l'EDT avec SwingUtilities.invokeLater() bien sûr

    a++

  3. #3
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Tu joues sur le setCaretPosition(monJTextArea.getDocument().length());
    Normalement ca devrait marcher...

  4. #4
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    > A exécuter dans l'EDT avec SwingUtilities.invokeLater() bien sûr

    regarde sans EDT :-))

    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
     
    import java.awt.Dimension;
    import java.awt.HeadlessException;
    import java.util.Timer;
    import java.util.TimerTask;
    import java.text.MessageFormat;
     
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.text.BadLocationException;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 13-Jun-2006
     * Time: 10:24:43
     * To change this template use File | Settings | File Templates.
     */
    public class MyFrame extends JFrame {
     
        private JTextArea myTextArea = null;
        private Timer timer = new Timer();
     
        public MyFrame() throws HeadlessException {
            myTextArea = new JTextArea();
     
            JScrollPane myScrollPane = new JScrollPane(myTextArea);
            myScrollPane.setPreferredSize(new Dimension(400, 100));
            add(myScrollPane);
     
            timer.scheduleAtFixedRate(new TimerTask() {
                int i = 0;
                public void run() {
                    myTextArea.append(MessageFormat.format("appending a new row n° {0}\n", i++));
                    try {
                        myTextArea.setCaretPosition(myTextArea.getLineEndOffset(myTextArea.getLineCount()-1));
                    } catch (BadLocationException e) {
                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                    }
                }
            }, 0, 1000);
        }
     
        public static void main(String[] args) {
            MyFrame myFrame = new MyFrame();
            myFrame.pack();
            myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            myFrame.setLocationRelativeTo(myFrame.getParent());
            myFrame.setVisible(true);
        }
    }

  5. #5
    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
    Citation Envoyé par bbclone
    > A exécuter dans l'EDT avec SwingUtilities.invokeLater() bien sûr

    regarde sans EDT :-))
    Pourquoi ne pas utiliser l'EDT ??? Au risque de se retrouver avec des "bugs bizarre"...

    Ce n'est pas plus dur de faire cela proprement, avec javax.swing.Timer par exemple (qui effectue ses traitement dans l'EDT) :
    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
    import java.awt.Dimension;
    import java.awt.HeadlessException;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.MessageFormat;
     
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    import javax.swing.text.BadLocationException;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 13-Jun-2006
     * Time: 10:24:43
     * To change this template use File | Settings | File Templates.
     */
    public class MyFrame extends JFrame {
     
        private JTextArea myTextArea = null;
     
        public MyFrame() throws HeadlessException {
            myTextArea = new JTextArea();
     
            JScrollPane myScrollPane = new JScrollPane(myTextArea);
            myScrollPane.setPreferredSize(new Dimension(400, 100));
            add(myScrollPane);
     
            javax.swing.Timer swingTimer = new javax.swing.Timer(1000, new ActionListener() {
                int i = 0;
                public void actionPerformed(ActionEvent event) {
                    myTextArea.append(MessageFormat.format("appending a new row n° {0}\n", i++));
                    try {
                        myTextArea.setCaretPosition(myTextArea.getLineEndOffset(myTextArea.getLineCount()-1));
                    } catch (BadLocationException e) {
                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                    }
                }
            });
            swingTimer.start();
        }
     
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    MyFrame myFrame = new MyFrame();
                    myFrame.pack();
                    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    myFrame.setLocationRelativeTo(myFrame.getParent());
                    myFrame.setVisible(true);
                }
            });
        }
    }

    a++

  6. #6
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    > Pourquoi ne pas utiliser l'EDT ??? Au risque de se retrouver avec des "bugs bizarre"...

    Teasing dude ;-)

    j'ai pas utiliser le swing timer parce que je sais qu'il est thread-safe.

    mais avec le code que j'ai poster tu aura jamais de "bug bizzare" non plus
    je vois qu'est ce que tu veux dire mais ce qui a c'est que certain developeur Swing n'ont jamais entendu parler de l'EDT et fons tous sans passer par ca.


    je voulais juste rire un peu
    excuse moi si t'a cru que je t'attaquais

  7. #7
    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
    Citation Envoyé par bbclone
    mais avec le code que j'ai poster tu aura jamais de "bug bizzare" non plus
    Tel quel, il y a peu de chance en effet... mais si tu l'utilises dans une application plus complexe il y a de fortes chances...

    Citation Envoyé par bbclone
    je vois qu'est ce que tu veux dire mais ce qui a c'est que certain developeur Swing n'ont jamais entendu parler de l'EDT et fons tous sans passer par ca.
    Et c'est un des raisons du fait que beaucoup pense que le framework Swing est buggé...


    Citation Envoyé par bbclone
    excuse moi si t'a cru que je t'attaquais
    Je ne me suis pas sentis attaqué... c'est juste que lorsque je lis ton message j'ai l'impression que tu veux dire que l'EDT ne sert à rien et qu'il est inutile de l'utiliser...

    a++

Discussions similaires

  1. affichage d'une bulle info sur un bouton disabled
    Par sallemel dans le forum Struts 1
    Réponses: 0
    Dernier message: 28/04/2009, 16h54
  2. Réponses: 1
    Dernier message: 14/08/2008, 11h57
  3. Aide sur l'affichage d'une bulle d'info svp
    Par Zan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 00h01
  4. [MFC]Info sur da la fusion sous Word
    Par kor dans le forum MFC
    Réponses: 6
    Dernier message: 22/08/2003, 11h14
  5. [CR] Infos sur l'utilisation de dll
    Par step dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 09/08/2002, 11h35

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