Problème de JScrollPane

MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003 - 5 mai 2003 à 18:29
14011983 Messages postés 1 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 19 juillet 2006 - 19 juil. 2006 à 13:35
Bonjour,

Je développe une appli qui contient un gros formulaire avec plein de JTextField, JButton, etc... . Tous ces composants n'entrant pas sur un écran, j'aimerais ajouter une barre de défilement sur la droite de l'écran, mais je n'y arrive pas.

Pour info, mon formulaire est une classe dérivée de JPanel. Dans son constructeur, je crée un JPanel dans lequel je place tous mes composants (sans utiliser de Layout, comme ça je place mes composants facilement avec la méthode setBounds()).

Puis j'essaie d'y placer une barre de défilement mais elle n'apparaît pas.

Si quelqu'un a une idée ou un morceau de code à m'envoyer, je suis tout à fait preneur.

Merci !

MH

12 réponses

cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
5 mai 2003 à 22:37
je l'ai pas fait, masi ça devrais marcher
ton JScrollBar dois être positionner quelques part. Ensuite tu lui met comme setModel un panel que tu positionnes tes élément dessus

attention, ton panel est accrocher à ton JScrollBar et celui ci est accrocher au frame, donc tu dois pas ajouter en plus le panel au frame
0
cs_BlackWood Messages postés 37 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 4 octobre 2006 2
6 mai 2003 à 11:32
Je pense qu'il faut que tu ajoutes la méthode getPreferredSize() à ta class * extends Jpanel.

Dans ta classe principale, tu as :
Formulaire formu = new Formulaire(); // par exemple
JScrollPane scroll = new JScrollPane(formu);
getContentPane().add(scroll);

OK ?

Bon, alors il faut que tu ajoutes :
class Formulaire extends JPanel {
   // Attributs
   // ...
   int LT,HT; // longueur et hauteur totale

   // Constructeur
   Formulaire {
      // ...
   }

   public Dimension getPreferredSize() {
      return new Dimension(LT,HT);
   }


Voilà, ça devrait marcher. Il faut juste que tu trouves toi-même la longueur et la hauteur de tout ton formulaire.

BlacWood
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
6 mai 2003 à 13:02
Merci d'avoir répondu.

En fait, j'ai trouvé un autre moyen pour afficher ma barre de défilement. J'utilise directement la classe JScrollBar sans passer par JScrollPane. Mais je sais pas si c'est une bonne idée car quand je bouge la barre le formulaire ne bouge pas.

Faut-il que je gère un évènement "déplacement de la barre" ou connais-tu une solution plus simple ?

MH
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
6 mai 2003 à 13:06
Merci d'avoir répondu.

En fait, j'ai trouvé un autre moyen pour afficher ma barre de défilement. J'utilise directement la classe JScrollBar sans passer par JScrollPane. Mais je sais pas si c'est une bonne idée car quand je bouge la barre le formulaire ne bouge pas.

Faut-il que je gère un évènement "déplacement de la barre" ou connais-tu une solution plus simple ?

MH
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_BlackWood Messages postés 37 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 4 octobre 2006 2
6 mai 2003 à 13:55
Hé bien le plus simple pour moi est ce que je t'ai marqué au-dessus, est-ce que tu as essayé ?
Je n'ai jamais utilisé de JScrollBar, toujours des JScrollPane, c'est plus simple alors je ne peux pas te répondre sur son utilisation... Désolé

BlackWood
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
6 mai 2003 à 15:36
faut bien faire attention quand on fait un JScrollBar, puisque moindrement on inverse dequoi, ça plante ou ça fasi ce que ça te fait

voici des bout de code, vérifie bien que tu fais tout dans le bon ordre (ça viens pas de moi, donc désoler si c'est pas optimiser)

JScrollPane listScroller = new JScrollPane();
JList nomsListe = new JList();
DefaultListModel listModel = new DefaultListModel();


nomsListe.setModel(listModel);
    String[] nomsData = {"Hubert","Jean","Emma","Pierre","Ewald","Charles","Martin"};
    //Ajouter le ListModel aux entrées
    for(int i = 0; i < nomsData.length; i++)
      listModel.addElement(nomsData[i]);
      listScroller.setBounds(35,36,155,192);
      // un seul élément peut être sélectionné à la fois
      nomsListe.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      nomsListe.addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent e){
          if(e.getClickCount() == 2){
            String newSelection = (String)(nomsListe.getSelectedValue());
            selectionTextField.setText(newSelection);
          }
        }
    });


//Inscrire la liste dans la zone de défilement
    listScroller.getViewport().add(nomsListe);
    //Ajouter les composants GUI au frame
    this.getContentPane().add(listScroller);


comme tu vois, fasi bien attention de ne pas écrire :
this.getContentPane().add(nomsListe);
puisque ça amrchera pas et ça risque de faire dequoi qui te fait présentement
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
7 mai 2003 à 00:05
JPanel leFormulaire;
JPanel panelDeLaJFrame;
JFrame f;
JScrollPane p= new JScrollPane(leFormulaire);
panelDeLaJFrame.add(p);

Core Breaker :)
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
7 mai 2003 à 10:52
Merci, j'ai essayé et ça marche à moitié; c'est déjà pas mal.
En fait, tous les composants que j'ajoute à mon panel "leFormulaire" s'affichent bien, mais toujours pas de barre de défilement. Peut-être que je dois la déclarer explicitement puis l'ajouter au JScrollPane ?

As-tu une idée à me suggérer ?

MH
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
7 mai 2003 à 13:51
As-tu essayé de grands formulaire ? Car la barre de défiliement s'affiche si besoin est.

Core Breaker :)
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
9 mai 2003 à 12:01
Bah ouais justement, mon formulaire est très grand mais les composants qui sont placés plus bas que la hauteur de l'écran n'apparaissent pas puisqu'il n'y a pas de barre de défilement.

???

MH
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
9 mai 2003 à 13:19
Je ne sais pas quoi dire alors car j'ai procédé comme je te l'ai indiqué et les barres de défilement s'affiche correctement.
Essai d'appeler la méthode pack() de ta frame à l'init.

Core Breaker :)
0
14011983 Messages postés 1 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 19 juillet 2006
19 juil. 2006 à 13:35
c moi
0