Crazyfab2
Messages postés4Date d'inscriptionlundi 22 octobre 2007StatutMembreDernière intervention20 juin 2010
-
19 juin 2010 à 18:29
Crazyfab2
Messages postés4Date d'inscriptionlundi 22 octobre 2007StatutMembreDernière intervention20 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();
}
}
}
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 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.