Mise à jour JPanel avec ScrollBar

Résolu
Crazyfab2 Messages postés 4 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 20 juin 2010 - 19 juin 2010 à 18:29
Crazyfab2 Messages postés 4 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 20 juin 2010 - 20 juin 2010 à 22:00
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

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
20 juin 2010 à 19:19
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.
3
Crazyfab2 Messages postés 4 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 20 juin 2010
20 juin 2010 à 22:00
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 :)
0
Rejoignez-nous