Mise à jour JPanel avec ScrollBar [Résolu]

Crazyfab2 4 Messages postés lundi 22 octobre 2007Date d'inscription 20 juin 2010 Dernière intervention - 19 juin 2010 à 18:29 - Dernière réponse : Crazyfab2 4 Messages postés lundi 22 octobre 2007Date d'inscription 20 juin 2010 Dernière intervention
- 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();
        	    }
}
}
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 20 juin 2010 à 19:19
3
Merci
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.

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 121 internautes ce mois-ci

Commenter la réponse de cs_Julien39
Crazyfab2 4 Messages postés lundi 22 octobre 2007Date d'inscription 20 juin 2010 Dernière intervention - 20 juin 2010 à 22:00
0
Merci
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 :)
Commenter la réponse de Crazyfab2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.