Partage
  • Partager sur Facebook
  • Partager sur Twitter

jscrollpane

custom scroll

Anonyme
    1 juillet 2015 à 14:15:51

    Bonjour j'aurais quelques petites questions sur les jscrollpane

    1.Peux etre personalisé le scroller  ? Histoire d'avoir un truc un peu plus beau que le basique (et degeux)

    j'aimerai plus vite un minimaliste du style

    http://4.bp.blogspot.com/-PzVPN05dx4k/U_wmP9Ez2xI/AAAAAAAABBs/1aVRIkCXbbU/s1600/jscrollpane.jpg

    2. est il possible de commencer "en bas" de mon jscrollpane

    J'entend par la que mon scrollpane servira a afficher une liste de message et j'aimerai qu'on se retrouve en bas du contenu du jscrollpanel

    merci les amis!

    • Partager sur Facebook
    • Partager sur Twitter
      1 juillet 2015 à 14:26:10

      Alors pour personnaliser ton scrollpane, la seule façon que j'ai trouvé est de changer le cellrenderer de la JList qui est dans la scrollpane.

      C'est pas très compliqué, mais il faut le faire (si tu veux, j'ai des exemples).

      edit : et pour modifier la scrollbar, il faut hériter de BasicScrollbarUI et override quelques méthodes

      -
      Edité par Triterium 1 juillet 2015 à 14:28:55

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        1 juillet 2015 à 16:04:27

        OK je veux bien des examples car je travaille sur ma propre UI qui est fort epurée

        • Partager sur Facebook
        • Partager sur Twitter
          1 juillet 2015 à 16:17:39

          Alors là je suis au boulot, j'ai pas mon ordi perso donc je peux pas te donner d'exemples précis, mais voila l'idée :

          tu crées un MyListCellRenderer qui implémente ListCellRenderer<ObjetAAfficher>

          Ensuite tu override la méthode getListCellRendererComponent et tu design ce que tu veux. Par exemple, tu crées un JPanel qui a telle couleur, telle font, tel bouton, etc. et tu retournes ce JPanel.

          Et enfin tu set le cellRenderer de ta JList avec celui que tu viens de créer.

          • Partager sur Facebook
          • Partager sur Twitter
            1 juillet 2015 à 16:28:25

            Par exemple :


            public class MyCellRenderer implements ListCellRenderer<MonObjetAAfficher> {
             
                @Override
                public Component getListCellRendererComponent(JList<? extends MonObjetAAfficher> list, MonObjetAAfficher e, int index, boolean isSelected, boolean cellHasFocus) {
                    
                    JPanel jp = new JPanel();
                    if (isSelected && cellHasFocus) {
                        jp.setBackground(new Color(240, 240, 240));
                    } else {
                        jp.setBackground(Color.white);
                    }
                    jp.setOpaque(true);
                    String message = "";
                    JLabel jl = new JLabel(message); 
                    
                    jp.add(jl);
             
                    return jp;
                }

            Et quand tu crées ta JList :

                    DefaultListModel<MonObjetAAfficher> lm = new DefaultListModel<>();
                    lm.add(new monObjetAAfficher(), 0);
             
                    JList<monObjetAAfficher> jl = new JList<>(lm);
                    jl.setCellRenderer(new MyListCellRenderer());
             
                    JScrollPane jsp = new JScrollPane(jl);




            -
            Edité par Triterium 1 juillet 2015 à 16:30:36

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              1 juillet 2015 à 16:44:33

              J'utilise un jscrollpane pas une jlist
              • Partager sur Facebook
              • Partager sur Twitter
                1 juillet 2015 à 16:47:46

                Oui mais tu mets bien des éléments dans ton jscrollPane non? Si oui, alors en les mettant dans une JList, ça produit le même effet et tu peux facilement changer l'apparence et la façon de les traiter.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  2 juillet 2015 à 9:02:00

                  J'ai pas tous compris la ><
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 juillet 2015 à 9:09:48

                    Normalement dans ton programme, tu as un jscrollpane, et tu ajoutes ensuite à ce jscrollpane des éléments, non?

                    Et bien là c'est pareil, sauf que tu les mets dans une JList avant de mettre la JList dans le jscrollpane, au lieu de les mettre directement dans le jscrollpane.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      2 juillet 2015 à 9:23:05

                      ok mais la barre du jscrollpane alors?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juillet 2015 à 10:00:57

                        Tu crées ta propre scrollBarUI qui hérite de BasicScrollBarUI, et tu override les méthodes qui vont bien. Si tu veux changer le bouton qui sert à monter l'ascenseur, tu override la méthode createIncreaseButton

                        (http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/basic/BasicScrollBarUI.html)

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          2 juillet 2015 à 11:32:19

                          La JList y a t il juste moyen de le faire "unselectable"
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 juillet 2015 à 11:35:31

                            Ben en fait de base ton nouveua cellRenderer ne fais rien quand isSelected est true. Donc à toi après de gérer les événements qui peuvent se passer si isSelected est à true. Et si tu ne veux rien faire, ben tu as juste à ne pas traiter le cas isSelected

                            -
                            Edité par Triterium 2 juillet 2015 à 11:36:04

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              10 juillet 2015 à 20:05:53

                              Bon je reviens vers vous, je n'arrive toujours pas a mettre mon jscrollPane avec la barre qui demarre en bas.. j'ai tester un code mais il me met toujours la barre vers le bas, meme quand je tente de scroller vers le haut

                               public synchronized void affichageMessage(ArrayList<messageChat> list){
                                      listChat.removeAll();
                                      listChat.setLayout(new BorderLayout());
                                      JPanel zone = new JPanel();
                                      zone.setLayout(new BoxLayout(zone,BoxLayout.Y_AXIS));
                                      JPanel zones = new JPanel();
                                      zones.setLayout(new FlowLayout(FlowLayout.CENTER));
                                      zones.setBackground(Color.decode("#fcfcfc"));
                                      zone.setBackground(Color.decode("#fcfcfc"));
                                      for(messageChat current : list){
                                              zone.add(current.getView(user.getId()));
                                      }
                                      zones.add(zone);
                                      JScrollPane pane = new JScrollPane(zones);
                                      JScrollBar sb = pane.getVerticalScrollBar();
                                      JScrollBar st = pane.getHorizontalScrollBar();
                                      sb.setValue(sb.getMaximum());
                                      System.out.println(sb.getMaximum());
                                      sb.setUI(new MyScrollBarUi(Color.decode("#cccccc"),Color.decode("#fcfcfc")));
                                      st.setUI(new MyScrollBarUi(Color.decode("#cccccc"),Color.decode("#fcfcfc")));
                                      pane.setBorder( null );
                                      /* Mettre le cursor en bas ========================================== */
                                      listChat.add(pane,BorderLayout.CENTER);
                                      listChat.repaint();
                                      listChat.revalidate();
                                      
                                  }

                              le resultat affiche une valeur possible (14300)

                                      System.out.println(sb.getMaximum());
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                13 juillet 2015 à 15:36:15

                                Personne n'a d'idée?
                                • Partager sur Facebook
                                • Partager sur Twitter

                                jscrollpane

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown