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:
Merci pour votre aide !
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); } }
Partager