probleme d'actualisation d'un JLabel dans un JPanel
1 réponse
Faab
Bonjour,
Je cherche à afficher sur un JPanel des JLabel qui contiennent des
ImageIcon. L'affichage initial fonctionne, mais je ne parviens plus à
modifier l'image
contenue dans chaque JLabel et mettre à jour ces images dans le JPanel
(celui-ci reste figé).
Extraits de mon fichier Panneau.java (extends JPanel) :
public class Panneau extends JPanel implements MouseListener {
public Panneau() {
//création d'images à mettre dans les Jlabel
// ici je crée 1 tableau qui contient tous les JLabel
billes = new Bille [nbligne][nbcolonnes];
for (int i=0; i<5; i++)
for (int j=0; j<7; j++) {
billes [i][j] = new Bille (imgvide,j,this) ;
add (billes [i][j]);
}
}
// affichage du contenu du JPanel
public void paintComponent (Graphics g) {
super.paintComponent(g) ;
for (int i = 0; i<5; i++) {
// pour chaque ligne
for (int j = 0; j<7; j++) {
// pour chaque colonne
// choix de l'image à afficher
ImageIcon im = imgvide ;
if (tableau[i][j] == 1) {
im=img2;
}
// ICI je cherche à modifier le contenu des JLabel et ça ne
fonctionne pas
billes[i][j].setImage(im);
repaint();
} // fin ligne
} // passe à la ligne suivante
}
// détection des clics OK (j'utilise les JLabel pour pouvoir recuperer les
clics)
public void mouseClicked(MouseEvent e) {
Object o = e.getSource() ;
Object i = findComponentAt(e.getPoint());
System.out.println("Clic detecte : classe "+i.getClass()); // renvoie
Bille
}
public void mouseEntered, mouseExited, mousePressed, mouseReleased...etc
// attributs de la classe : Fenetre, Images, int [][] tableau ; public
Bille [][] billes ;
}// fin classe
// cette classe sert à afficher des JLabel qui contiennent une image ainsi
que des informations sur l'image sous la forme d'un entier
class Bille extends JLabel {
int col ; ImageIcon img ; // attributs
public Bille(ImageIcon i, int colonne, MouseListener m) {
super((Icon)i); img = i; col = colonne ; addMouseListener(m);
}
public int getCol () {return col;}
public void setImage (ImageIcon i) {
img=i;// COMMENT METTRE L'IMAGE A JOUR ?
repaint(); // fonctionne pas
}