Bonjour,

J'ai commencé le code d'une classe pour un bouton particulier.
L'idée: les images du bouton sont des images (jpg, gif...) dans des dossiers que l'on passe en paramètre à la construction (ou avec des setters...) et le bouton se dessine tout seul, par exemple au survol de la sourie on change d'image...

Le soucis: à la base j'avais fait dériver ma classe de JPanel. J'ai redéfinit paintComponent(Graphics) pour que le bouton se dessine. Jusque là: niquel !
Mais un bouton doit pouvoir envoyer des événements aux ActionListener, et dans la classe JPanel il n'y a pas la méthode addActionListener(ActionListener).
J'ai donc fait dériver ma classe de JButton, le problème c'est que paintComponent(Graphics) ne fait plus rien (rien de dessiné à l'écran, même si la méthode est bien appelée). J'ai essayé de mettre le dessin dans la méthode paint(Graphics) mais rien n'y fait également.

Si ça peut aider, voici le code que j'ai déjà fait et qui fonctionne, le problème étant que addActionListener n'est pas définie dans JPanel et que je ne voie pas comment l'ajouter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 
import java.awt.*;
import java.awt.event.*;
 
import javax.swing.JPanel;
import java.io.File;
 
 
public class ImageBouton extends JPanel implements MouseListener {
 
	private static final long serialVersionUID = 1L;
 
	/** Etat du bouton à l'arrêt. */
	public static final int ETAT_NORMAL = 0;
	/** Etat du bouton quand survolé par la sourie. */
	public static final int ETAT_HOVER = 1;
	/** Etat du bouton quand cliqué. */
	public static final int ETAT_CLIC = 2;
 
 
	// Contient les images
	private Image[] image;
 
	// Etat du bouton
	private int etat;
 
 
	public ImageBouton() {
 
		// Pas d'image par défaut
		image = new Image[3];
		image[0] = image[1] = image[2] = null;
 
		// Le bouton s'écoute lui-même
		addMouseListener(this);
 
		// Initialisé à l'état normal au départ
		etat = ETAT_NORMAL;
	}
 
 
 
 
	public boolean setImage(String filePath, int etat) {
 
		// On teste l'existence du fichier
		if( filePath != null && !new File(filePath).exists() )
			return false;
 
		// On test si l'état demandé existe
		if( etat < 0 || etat > 2)
			return false;
 
		// On créer l'image
		image[etat] = creerImage(filePath);
 
		// Succès
		return true;
	}
 
 
 
	public boolean setImages(String[] filePath) {
 
		if(filePath == null || filePath.length < 2)
			return false;
 
		boolean chargement = true;
 
		if( !setImage(filePath[ImageBouton.ETAT_NORMAL], ImageBouton.ETAT_NORMAL) )
			chargement = false;
 
		if( !setImage(filePath[ImageBouton.ETAT_HOVER], ImageBouton.ETAT_HOVER) )
			chargement = false;
 
		if( !setImage(filePath[ImageBouton.ETAT_CLIC], ImageBouton.ETAT_CLIC) )
			chargement = false;
 
		return chargement;
	}
 
 
 
	public void paintComponent(Graphics g) {
 
		if( image[etat] != null )
			g.drawImage(image[etat], 0, 0, this);
 
	}
 
 
	public void mousePressed(MouseEvent e) {
		if( e.getSource() == this)
			etat = ETAT_CLIC;
		repaint();
	};
 
	public void mouseReleased(MouseEvent e) {
		if( e.getSource() == this)
			etat = ETAT_NORMAL;
		repaint();
	};
 
	public void mouseClicked(MouseEvent e) { };
 
	public void mouseEntered(MouseEvent e) {
		if( e.getSource() == this)
			etat = ETAT_HOVER;
		repaint();
	};
 
	public void mouseExited(MouseEvent e) {
		if( e.getSource() == this)
			etat = ETAT_NORMAL;
		repaint();
	};
 
 
	private Image creerImage(String filePath) {
		return Toolkit.getDefaultToolkit().getImage(filePath);
	}
 
}
Merci pour votre aide !