Mise à jour JPanel avec ScrollBar [Résolu]

Signaler
Messages postés
4
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
20 juin 2010
-
Messages postés
4
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
20 juin 2010
-
Bonjour, j'ai parcouru longuement le forum avec quelques sujet traitant plus ou moins du même sujet mais je n'ai toujours pas réussi à résoudre mon problème :s.

Mon but est donc d'afficher un JLabel directement dans une JFrame mais selon la taille de mes données, la JLabel peut dépasser de la fenêtre en dessous.
C'est pourquoi j'ai cherché à mettre un ScrollBar pour faire bouger les informations.

Je ne sais pas si ce qui ne marche pas est qu'il ne mémorise pas les info quand je les ajoute en dehors de la fenêtre ou si il ne les met simplement pas à jour.

Voilà le code :
Les attributs :
    private JFrame fen = new JFrame();
    private JLabel[][] tab; //pour le texte
    private JLabel[][] tab2;	//pour les images
    private JLabel pan = new JLabel();
    private Scrollbar vbar;
    int decalageV=0;

La méthode pincipale
fen.setTitle("Affichage Resultats");
fen.setSize(1050,800);
fen.setLocationRelativeTo(null);
fen.setResizable(true);
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setVisible(true);
fen.setLayout(new BorderLayout());

pan.setLayout(new BorderLayout());
pan.setBounds(0,0,1000,800);
fen.add(pan);

/* Remplissage de pan ... */

vbar = new Scrollbar(Scrollbar.VERTICAL,0,(int)(800 * 0.5),0,pan.getBounds().height);
vbar.addAdjustmentListener(this);
fen.add("East",vbar);


Et la méthode qui réagit aux actions sur la ScrollBar
public void adjustmentValueChanged(AdjustmentEvent evt) {
if (evt.getSource()==vbar) 
decalageV=evt.getValue();

pan.setBounds(0,-decalageV,1000,800);

for(int i = 0; i<tab.length;i++){
        	    for(int j = 0; j<tab[i].length;j++){
        		tab[i][j].repaint();
        	    }
}
}

2 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
293
J'ai l'impression que l'erreur est assez souvent commise, en fait, il faut ajouter le JLable au ScrollPane,
JLabel pan = new JLabel("texte");
JScrollPane scroll = new JScrollPane(pan);
scroll.setBounds(0,0,1000,800);
fen.add(scroll);
//On n'ajoute pas le JLabel


Ensuite, à chaque modification fen.repaint(); pour réinitialiser et c'est réglé.

Par contre, je penses que tu vas avoir un soucis, le JLabel ne tolère pas l'écriture sur plusieurs lignes (sauf si on ajoute du code html mais c'est pas terrible) tu devrais plutôt utiliser une JTextArea.
Messages postés
4
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
20 juin 2010

Merci beaucoup de ton aide, tu m'as donné une nouvelle voie à réfléchir et j'ai compléter ta réponse avec d'autres forums.

J'ai donc changé pan en JTextArea et rajouté :
pan.setPreferredSize(new Dimension(1000,tab.length*800));
        scroll = new JScrollPane(pan);
        scroll.setSize(200, 200);
        fen.add(scroll);


Après avoir rentré les valeurs dans pan.

Maintenant ça marche très bien, merci beaucoup :)