Problème de JScrollPane

Signaler
Messages postés
16
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
30 juillet 2003
-
Messages postés
1
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
19 juillet 2006
-
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

Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
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
Messages postés
37
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
4 octobre 2006
2
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
Messages postés
16
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
30 juillet 2003

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
Messages postés
16
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
30 juillet 2003

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
Messages postés
37
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
4 octobre 2006
2
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
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
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
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
JPanel leFormulaire;
JPanel panelDeLaJFrame;
JFrame f;
JScrollPane p= new JScrollPane(leFormulaire);
panelDeLaJFrame.add(p);

Core Breaker :)
Messages postés
16
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
30 juillet 2003

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
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
As-tu essayé de grands formulaire ? Car la barre de défiliement s'affiche si besoin est.

Core Breaker :)
Messages postés
16
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
30 juillet 2003

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
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
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 :)
Messages postés
1
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
19 juillet 2006

c moi