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 :

[Debutant] [scrollbar] Maintenir l'ascenseur à une position extrème par défaut


Sujet :

Composants Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut [Debutant] [scrollbar] Maintenir l'ascenseur à une position extrème par défaut
    Bonjour, voila j'ai un jscrollpane avec un text area dedans et le probleme c'est que je fais un chat et donc j'aimerais que quand une nouvelle phrase arrive que l'ascenseur descende aussi mais pas moyen de trouvé dans les propieté ca doit etre tout bete mais je vois et j'ai deja cherché pas mal
    Voila c'est tout con mais ca me fais chier.
    Surtout que mon chat fonctionne :s

    ++

  2. #2
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Attention ça va aller très vite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dimension dimConv = conversation.getSize();
    scrollConversation.scrollRectToVisible(new Rectangle(0,dimConv.height - 1,dimConv.width,1));
    Ah ben j'avais prévenu hein...
    Bon alors pour les explications :
    - scrollConversation c'est mon JScrollPane avec mon JTextArea dedans
    - conversation c'est mon JTextArea qui affiche les message du chat

    Ca fait un peu bricolage mais j'ai testé c'est garanti sans bavure...

    En prime je te donne même le code de toute la méthode actionPerformed() qui est déclenchée au clic sur le bouton Envoyer ou quand tu tapes sur Entrée alors que tu es dans le JTextField de message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void actionPerformed(ActionEvent e){
    		String msgtxt = message.getText();
    		if(msgtxt.length() > 0){
    			conversation.setText(conversation.getText() + "\n" + me + "> " + msgtxt);
    			Dimension dimConv = conversation.getSize();
    			scrollConversation.scrollRectToVisible(new Rectangle(0,dimConv.height - 1,dimConv.width,1));
    			message.setText("");
    		}
    	}
    Et voila...

    Bon courage @+++
    Sébastien ARBOGAST
    SCJP

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Bon sinon je viens d'essayer de faire une frame toute con avec un jscrollpane et un textarea et l'ascenseur fonctionne bien :
    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class TestScroll extends JFrame {
      JPanel jPanel1 = new JPanel();
      JScrollPane jScrollPane1 = new JScrollPane();
      BorderLayout borderLayout1 = new BorderLayout();
      JTextArea jTextArea1 = new JTextArea();
      JButton jButton1 = new JButton();
     
      public static void main(String[] args) {
        TestScroll ts = new TestScroll();
        ts.setVisible(true);
      }
     
      public TestScroll() throws HeadlessException {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      private void jbInit() throws Exception {
        jPanel1.setLayout(borderLayout1);
        jTextArea1.setText("jTextArea1");
        jButton1.setText("jButton1");
        jButton1.addActionListener(new TestScroll_jButton1_actionAdapter(this));
        this.getContentPane().add(jPanel1, BorderLayout.CENTER);
        jPanel1.add(jScrollPane1,  BorderLayout.CENTER);
        jPanel1.add(jButton1,  BorderLayout.SOUTH);
        jScrollPane1.getViewport().add(jTextArea1, null);
      }
     
      void jButton1_actionPerformed(ActionEvent e) {
        jTextArea1.setText(jTextArea1.getText() + "\nligne");
      }
    }
     
    class TestScroll_jButton1_actionAdapter implements java.awt.event.ActionListener {
      TestScroll adaptee;
     
      TestScroll_jButton1_actionAdapter(TestScroll adaptee) {
        this.adaptee = adaptee;
      }
      public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
      }
    }

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    J'ai compris, ton prog fonctionne tres bien, mais seulement avec un setText, quand je remplace par append ca ne fonctionne plus.
    Et comme je fais un chat je peux pas me permettre un setText car apres une certaine taille ca ne fonctionne plus, donc il n'y a pas une autre solution?

  5. #5
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    C'est surement pour ça que ça marche chez "ton pote" et pas chez toi : parce que lui il utilise un setText et que setText s'occupe tout seul de scroller pour faire en sorte que la fin du texte soit visible... Après je te conseille d'étudier correctement l'API de JTextArea, voire de changer de composant de texte (cf. le Java Tutorial correspondant)
    Sébastien ARBOGAST
    SCJP

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    Il faut savoir que les somposants Swing de Java ne peuvent pas avoir d'office tous les comportements possibles qu'on peut en avoir. Certains ont été prévu et s'il s'agit souvent d'une propriété, et pour les autres, il faut les gérer en mettant un peu de code, tout en sachant que Swing est quand même bien fait, et qu'on dispose de tous les éléments pour résoudre la plupart des cas.

    Bon, pour ton problème, puisque le scroll n'est pas automatique, il suffit à chaque insertion de texte, de redéplacer le scroll. rozwel t'a donné une solution. Moi, je t'en donne une autre qui revient au même, et qui te plaira peut-être plus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JScrollBar scrollBar = myScrollPane.getVerticalScrollBar();
    scrollBar.setValue( scrollBar.getMaximum() );
    En tout cas, tu pourras trouver d'autres solution du genre, mais ce sera dur de faire plus simple.

  7. #7
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Un copine totalement ignorante de la chose informatique m'a dit un jour :
    Mais qu'est ce que tu fais comme informaticien, tu vas sur le web toute la journée en fait c'est ça !
    Moralité : ce qui est apparemment simple pour le débutant, ne l'est pas toujours vraiment (poil aux dents !... désolé mais ça décrispe)

    En l'occurence le JScrollPane fait partie des ces composants de Swing programmés pour nous simplifier la tâche au maximum et nous permettre de nous concentrer sur les fonctionnalités en gérant complètement la partie affichage d'une manière largement suffisante pour la plupart des application basiques. Les composants à modèle marchent comme ça : les JTree, les JTable, la plupart du temps, tu peux ne pas y toucher et te concentrer sur le modèle.
    Et ben les JScrollPane c'est pareil : tu fais un new JScrollPane() avec ton composant en paramètre et il s'occupe de tout : évènements utilisateur, interface, affichage/cachage des ascenseurs. Quelques paramètres customisés et ça suffit largement à la plupart des applications. Et même avec des trucs poussés : moi je l'ai utilisé pour un composant de dessin, et ben scrollRectToVisible() m'a suffit...

    Alors en gros voila pourquoi c'est pas si simple selon moi... mais je ne dis pas que je sais tout, je suis peut etre passé a coté de quelque chose... mais la je jette l'éponge...
    Sébastien ARBOGAST
    SCJP

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Merci sa marche presque nikel jusque des fois il m'affiche 2x le meme message mais je vais trouver merci encore plopinou.

    Et je sais tres bien que c'est pour nous facilité la vie, je sais parfaitement que derriere il y a du code compliqué, j'ai du pascal, du c, assembleur etc donc question difficulté je sais bien ce que c'est c'est juste que les createur de jbuilder 10 on mit tellement d'option dans leurs truc que je me demandais si il y avais pas une chose simple qui le ferais!!!
    Parceque recreer un truc déja tout fais c'et un peu inutile mais si tu aimes perdre ton temps, c'et le tien apres tout!

    Sur ce Merci encore plopinou, et arrete de te prendre la tete rozwel (bien que avec ce pseudo c'est normal lool) . pas la peine de repondre je viendrais plus lire le topic vu qu'il est resolu

    ++ et bonne soiree a tous

    ps : je suis sur que ca va en aidé plein en detresse

  9. #9
    Membre régulier Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    salut,

    je dois faire exactement la même chose, srollbar + jtextarea avec append()
    et
    je me permet de remonter ce thread (vous avez vu, j'ai fais une recherche hein ), car ça ne marche pas pour moi...

    la scrollbar bouge effectivement mais le texte n'est pas en entier dedans. Il manque à chaque fois un bout.

    Quid ?

    bouts de code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    JTextArea jta_text;
    JScrollPane jsc_scroll;
    ...
    jta_text = new JTextArea("blabla\n",30,50);
    jsc_scroll = new JScrollPane(jta_text);
    getContentPane().add(jsc_scroll,BorderLayout.CENTER);
     
    ...
    JScrollBar scrollBar = jsc_scroll.getVerticalScrollBar(); 
    scrollBar.setValue( scrollBar.getMaximum());
    Chasseur de bug en activité
    L'erreur est humaine, mais pour vraiment foutre le bordel, on a besoin d'un ordinateur

  10. #10
    Membre averti
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Points : 444
    Points
    444
    Par défaut
    il faut mieux utiliser la soluce avec scrollRectToVisible donnée en premiére réponse, la synchronization entre le scroll bar et le panneau affichant le text marche mieux en agissant sur le JScrollPane
    [Edit]J'avais mal lu la soluce que je t'ai dit de regarder; il faut la corriger de :
    Citation Envoyé par rozwel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dimension dimConv = conversation.getSize();
    scrollConversation.scrollRectToVisible(new Rectangle(0,dimConv.height - 1,dimConv.width,1));
    a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dimension dimConv = conversation.getSize();
    scrollConversation.getViewport().scrollRectToVisible(new Rectangle(0,dimConv.height - 1,dimConv.width,1));
    Pour avoir une réponse efficace :
    1) Soyez précis dans vos questions
    2) Choisssez bien votre forum
    3) Consultez la FAQ et la doc avant

  11. #11
    Membre régulier Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    oui sauf que ça, ça ne marche pas. Ca marche car il fait setText(). Si tu mets Append (et il faut utiliser append) à la place, ça ne scroll rien du tout ...

    il faut faire un repaint ou un truc du style peut être ?

    [edit] ok j'ai vu tu as edité je testerai ca en rentrant, merci
    Chasseur de bug en activité
    L'erreur est humaine, mais pour vraiment foutre le bordel, on a besoin d'un ordinateur

  12. #12
    Membre régulier Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Points : 113
    Points
    113
    Par défaut
    merci, comme ça ça mache

    Chasseur de bug en activité
    L'erreur est humaine, mais pour vraiment foutre le bordel, on a besoin d'un ordinateur

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Je me permet de faire remonter ce post car j'ai un probleme :

    Chez moi j'ai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dimension dimConv = jpanel_miniatures_article.getSize();
    jsp_miniatures_article.getViewport().scrollRectToVisible(new Rectangle(0,dimConv.height - 1,dimConv.width,1));
    Et cela ne marche pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JScrollBar scrollBar = jsp_miniatures_article.getHorizontalScrollBar(); 
    scrollBar.setValue( scrollBar.getMaximum());
    Ce code marche meme si la scroll bar ne scroll pas completement en bas ... comment je peux faire pour avoir un code qui me permette de scroller ... vraiment tout en bas ! ?

  14. #14
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    UP.

    Bonjour tou d'abord car c'est mon permier message ici.

    Voilà, j'ai le même problème que nombre d'entre vous je pense : ça marche presque... mais pas tout à fait.

    Les deux solutions sont bonnes (rectangle ou scrollbar) mais dans les deux cas le scrolling n'est pas "toujours" effectué correctement.

    C'est d'ailleurs un peu surréaliste : si on fait deux fois la même chose ça devrait donner le même résultat...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public synchronized void scrollDown(){
        	Dimension dimConv = listChat.getSize();
        	scrollPane.getViewport().scrollRectToVisible(new Rectangle(0,dimConv.height - 1,dimConv.width,1));
        }
    J'ai cru que ajouter le synchronized changerai quelque chose mais non : le scrolling se fait aléatoirement. Des fois ça marche des fois non...

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Re UP.

    Le problème persiste : ce sujet n'est pas vraiment résolu.

  16. #16
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Merfolk
    oui sauf que ça, ça ne marche pas. Ca marche car il fait setText(). Si tu mets Append (et il faut utiliser append) à la place, ça ne scroll rien du tout ...

    il faut faire un repaint ou un truc du style peut être ?
    salut,

    heu c bizarre parceque moi g exactement le probleme inverse : je met a jour un textarea avec append, et il se positionne a la fin du texte, alors que je voudrais qu'il reste au debut
    voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void valueChanged(TreeSelectionEvent e) {
        	TreePath CurrentNodePath = e.getPath();
        	CurrentNode = (DefaultMutableTreeNode)CurrentNodePath.getLastPathComponent();
        	t=new Test();
        	t.recupererTest(CurrentNode.toString());
        	td.nameText.setText(t.getNom());
        	td.authorText.setText(t.getAuthor());
        	td.createdText.setText(t.dateFormat.format(t.getCreated()));
        	td.purposeText.append(t.getDesc());
        	td.requiredText.append(t.getRequis());
        }
    td est le pannel que je veux mettre a jour
    cette fonction s'execute donc quand je parcours une arborescence, et je veux que mes Champs change de valeurs, mais sans faire les scrolls

    quelqu'un a une idée?

  17. #17
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    bah pour toi c'est tout bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JScrollBar scrollBar = jsp_miniatures_article.getHorizontalScrollBar();
    scrollBar.setValue(scrollBar.getMaximum());
    Et tu remplace scrollBar.getMaximum() par l'index de départ de ta zone. Genre 1 ou .getMinimum() si ça existe.

    Mais c'est du tout le même type de soucis là :/

  18. #18
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    salut
    ben en fait j'avais essayé ca deja, mais ca marche pas

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

Discussions similaires

  1. Réponses: 150
    Dernier message: 27/10/2011, 21h27
  2. imprimer un PDF sur une imprimante non par défaut
    Par bremer dans le forum Langage
    Réponses: 5
    Dernier message: 25/12/2007, 22h46
  3. Récupérer une propriété CSS par défaut
    Par Switche dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/08/2007, 22h57

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