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 :

JScrollPane, descente automatique du curseur


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 81
    Par défaut JScrollPane, descente automatique du curseur
    Bonjour, j'ai un petit soucis avec un JScrollPane. J'ai une JTextArea et un JScrollPane dedans, du texte est généré automatiquement à l'intérieur de ce JTextArea et la barre verticale de mon JScrollPane ne descent pas automatiquement, elle reste tout en haut, créant un décalagé

    Quelqu'un aurait-il une idée pour fair un sorte que la barre de mon JScrollPane reste en base de celui-ci de manière à n'afficher que les dernière entrées en premiers, et ceci dynamiquement ?

    Merci d'avance tout le monde ^^

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    Difficile de t'aider, puisque tu ne montres pas ton code.
    Ci-dessous une classe prêt-à-compiler, avec un ascenseur qui reste "collé" en bas. En espérant que cela puisse aider...

    Nicolas

    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
    import java.awt.*;
    import javax.swing.*;
     
    // par Nicolas_75
     
    public class Exemple015_JScrollPaneContenantDesJTextArea {
     
        public static void main(String[] args) {
     
            // initialisation de la frame :
            JFrame maFrame = new JFrame();
            maFrame.setResizable(false);
            maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            // on veut qu'elle prenne toute la place possible
            Toolkit kit = Toolkit.getDefaultToolkit();
            Insets insets = kit.getScreenInsets(maFrame.getGraphicsConfiguration());
            Dimension screen = kit.getScreenSize();
            maFrame.setSize((int)(screen.getWidth()-insets.left-insets.right), (int)(screen.getHeight()-insets.top-insets.bottom));
            maFrame.setLocation((int)(insets.left), (int)(insets.top));
     
            // affichage de la frame
            maFrame.setVisible(true);
     
            // container de la frame
            JPanel bigPanel = new JPanel();
            bigPanel.setLayout(new BorderLayout()); 
            maFrame.setContentPane(bigPanel);
     
            // une boîte verticale englobée dans un JScrollPane, destinée à recevoir des JTextArea :
            JPanel verticalBoxPanel = new JPanel();
            verticalBoxPanel.setLayout(new BoxLayout(verticalBoxPanel, BoxLayout.Y_AXIS));
            JScrollPane scroll = new JScrollPane(verticalBoxPanel);
            bigPanel.add(scroll);
     
            // on rajoute des JTextArea :
            JTextArea area;
            double position = 1; // POSITION DE LA BARRE DE DEFILEMENT (ENTRE 0 et 1)
            int nbDeJTextArea = 100;
            for (int i=0; i<nbDeJTextArea; i++) {
                area = new JTextArea("JTextArea "+i+" sur "+nbDeJTextArea);
                verticalBoxPanel.add(area);
                JScrollBar jsb = scroll.getVerticalScrollBar();
                jsb.setValue((int) (jsb.getMinimum()+(jsb.getMaximum()-jsb.getMinimum())*position));
                bigPanel.revalidate();
                try {Thread.sleep(50);} catch (Exception e) {e.printStackTrace();}
            }
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 81
    Par défaut
    Hahaha excellent cet exemple ^^
    (il me fait assez "tripper" je sais pas pourquoi xD)

    Merci Nicolas, c'est exactement ce dont j'avais besoin

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Je t'en prie.

    Si cela peut aider, j'ai retrouvé deux exemples autour d'un JTextArea unique :
    - avec setValue,
    - avec setCaretPosition.

    Les deux sont prêts-à-compiler.

    Nicolas

    Exemple 1, avec setValue

    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
    // appeler le fichier : Exemple017_JScrollPaneAutourDUnJTextAreaAvecSetValue.java
    // par Nicolas_75
     
    import javax.swing.*;
     
    public class Exemple017_JScrollPaneAutourDUnJTextAreaAvecSetValue {
     
        public static void main(String[] args) {
            // création de la fenêtre :
            JFrame maFrame = new JFrame();
            maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JTextArea area = new JTextArea();
            area.setRows(10);
            area.setColumns(20);
            JScrollPane scroll = new JScrollPane(area);
            maFrame.getContentPane().add(scroll);
            maFrame.pack();
            maFrame.setVisible(true);
            // position souhaitée de la barre de défilement :
            double position = 1; // pour 1/4
            JScrollBar jsb = scroll.getVerticalScrollBar();
            // ajout de 100 lignes de texte à la JTextArea
            // en maintenant la barre de défilement à la position voulue :
            for (int i=1; i<=100; i++) {
                area.append("Ligne "+i+"\n");
                jsb.setValue((int) (jsb.getMinimum()+(jsb.getMaximum()-jsb.getMinimum())*position));
                try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); }
            }
        }
    }
    Exemple 2, avec setCaretPosition

    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
    // appeler le fichier Exemple023_JScrollPaneAutourDUnJTextAreaAvecSetCaretPosition.java
    // par Nicolas_75
     
    import javax.swing.*;
     
    public class Exemple023_JScrollPaneAutourDUnJTextAreaAvecSetCaretPosition {
     
        public static void main(String[] args) {
            // création de la fenêtre :
            JFrame maFrame = new JFrame();
            maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JTextArea area = new JTextArea();
            area.setRows(10);
            area.setColumns(20);
            JScrollPane scroll = new JScrollPane(area);
            maFrame.getContentPane().add(scroll);
            maFrame.pack();
            maFrame.setVisible(true);
            // position souhaitée de la barre de défilement :
            double position = 1; // POSITION SOUHAITEE, ENTRE 0 ET 1
            // ajout de 100 lignes de texte à la JTextArea
            // en maintenant la barre de défilement à la position voulue :
            for (int i=1; i<=100; i++) {
                area.append("Ligne "+i+"\n");
                area.setCaretPosition((int) (position * area.getDocument().getLength()));
                try { Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); }
            }
        }
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2008, 22h09
  2. Changement automatique de curseur
    Par tryonyco dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/04/2007, 21h12
  3. [JScrollPane] redéfinition automatique du contenu
    Par vasilov dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/12/2006, 09h24
  4. JScrollPane pas automatiquement en bas
    Par fabule dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/07/2006, 16h33
  5. Déplacement "automatique" du curseur
    Par Amenofis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/01/2003, 18h57

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