Fond d'un bouton qui réapparait
Résolu/Fermé
andredrea
Messages postés
227
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
3 mars 2021
-
Modifié par andredrea le 26/03/2016 à 18:56
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 - 7 avril 2016 à 21:47
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 - 7 avril 2016 à 21:47
A voir également:
- Fond d'un bouton qui réapparait
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? - Forum VB / VBA
- Réinitialiser chromecast sans bouton - Guide
- Comment débloquer un bouton enfoncé - Forum Samsung
- Comment mettre une vidéo en fond d'écran - Guide
- Bouton reinitialisation pc - Guide
3 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
26 mars 2016 à 20:59
26 mars 2016 à 20:59
Bonjour,
Je ne suis pas sûr d'avoir bien compris le problème mais tu créé trop de ressources images cela vient peut-être de là.
Au de lieu de faire un
Remarque : il est maladroit de faire un addMouseListener(this); parce que ta classe devient fourre tout, à gérer à la fois le bouton et ses événements alors que ce sont deux choses hétérogènes.
De plus, le nom "Commencer" n'est pas très parlant, il ne permet de savoir que tu manipules un objet de type JButton...
Je ne suis pas sûr d'avoir bien compris le problème mais tu créé trop de ressources images cela vient peut-être de là.
Au de lieu de faire un
setIcon(new ImageIcon(...))à chaque fois, charges tes images une seule au fois et réutilises les mêmes objets.
Remarque : il est maladroit de faire un addMouseListener(this); parce que ta classe devient fourre tout, à gérer à la fois le bouton et ses événements alors que ce sont deux choses hétérogènes.
De plus, le nom "Commencer" n'est pas très parlant, il ne permet de savoir que tu manipules un objet de type JButton...
public class StartBouton extends JButton { private static final long serialVersionUID = 1; private static final Icon start = new ImageIcon("im/start.png"); private static final Icon start2 = new ImageIcon("im/start2.png"); private final Jeu jeu; public StartBouton(Jeu jeu) { super(); this.jeu = jeu; setDisabledIcon(start2); setPreferredSize(new Dimension(139, 50)); setContentAreaFilled(false); // transparence du fond setBorderPainted(false); // retire contour qd selection setIcon(start); addMouseListener(new LocalMouseListener()); } private final class LocalMouseListener implements MouseListener { @Override public void mouseClicked(MouseEvent e) { if (isEnabled()) { jeu.fenJeu(); } } @Override public void mousePressed(MouseEvent e) { setIcon(start2); } @Override public void mouseReleased(MouseEvent e) { setIcon(start); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } } }
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
107
Modifié par greg6614 le 27/03/2016 à 15:24
Modifié par greg6614 le 27/03/2016 à 15:24
Cela ne concerne pas ton soucis mais ta classe
En espérant t'avoir aider
Greg
LocalMouseListenerpourrait
extendsla classe abstraite
MouseAdapterplutôt que
implementsl'interface
MouseListenercomme ça tu n'aurais pas besoin d'implémenter les méthodes
MouseEnteredet
MouseExiteddont tu ne te sers pas.
En espérant t'avoir aider
Greg
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
27 mars 2016 à 15:29
27 mars 2016 à 15:29
En effet, mais j'ai voulu garder plus ou moins le même code que l'original.
andredrea utilisait un MouseListener alors je l'ai gardé...
Remarque : étendre MouseAdapter était impossible dans le code d'origine car on ne peut pas extends deux classes en même temps.
Cela rejoint un peu l'idée que le Listener (ou l'Adapter) ne devrait pas être implémenté dans la même classe que le JButton.
andredrea utilisait un MouseListener alors je l'ai gardé...
Remarque : étendre MouseAdapter était impossible dans le code d'origine car on ne peut pas extends deux classes en même temps.
Cela rejoint un peu l'idée que le Listener (ou l'Adapter) ne devrait pas être implémenté dans la même classe que le JButton.
greg6614
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
107
27 mars 2016 à 21:44
27 mars 2016 à 21:44
Il est vrai je n'avais regardé que le code de ton post en pensant que c'était le même, je n'avais pas fais gaffe que tu avais modifié la structure.
andredrea
Messages postés
227
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
3 mars 2021
3
5 avril 2016 à 09:48
5 avril 2016 à 09:48
Bonjour, merci beaucoup pour vos réponses se sont des fautes que j'ai corrigé !
J'utilise un mouselistener car j'ai par la suite eu besoin de toutes les méthodes
Le problème était, et je m'en doutais un peu, qu'a chaque fois que survole le bouton, le jpanel sur lequel il était, était redessiné donc j'ai du utiliser un repaint a chaque survole de souris. Le mystère est: pourquoi est il redessiné à chaque survol alors que je n'ai pas mis de fonction dans le MouseEntered si ce n'est que de changer l'image du bouton
(je viens de remarqué j'ai rempli les mauvaises fonctions ici, il s'agit bien de survol et non de pressed et release)
J'utilise un mouselistener car j'ai par la suite eu besoin de toutes les méthodes
Le problème était, et je m'en doutais un peu, qu'a chaque fois que survole le bouton, le jpanel sur lequel il était, était redessiné donc j'ai du utiliser un repaint a chaque survole de souris. Le mystère est: pourquoi est il redessiné à chaque survol alors que je n'ai pas mis de fonction dans le MouseEntered si ce n'est que de changer l'image du bouton
(je viens de remarqué j'ai rempli les mauvaises fonctions ici, il s'agit bien de survol et non de pressed et release)
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
Modifié par KX le 5/04/2016 à 19:35
Modifié par KX le 5/04/2016 à 19:35
Le mystère est: pourquoi est il redessiné à chaque survol
Java choisit quand il faut redessiner une zone, il peut ne jamais le faire pour certaines zones comme le faire des dizaines de fois de suite sur toute l'application.
Dans ton cas il faudrait regarder en détail mais le fait que tu survoles la zone tu dois avoir ton curseur (flèche, sablier, etc) qui se dessine par dessus, et si tu bouges un peu la souris il faut redessiner tout ce qu'il y avait sous le curseur sinon ça va laisser une trace le long du chemin de la souris.
Java choisit quand il faut redessiner une zone, il peut ne jamais le faire pour certaines zones comme le faire des dizaines de fois de suite sur toute l'application.
Dans ton cas il faudrait regarder en détail mais le fait que tu survoles la zone tu dois avoir ton curseur (flèche, sablier, etc) qui se dessine par dessus, et si tu bouges un peu la souris il faut redessiner tout ce qu'il y avait sous le curseur sinon ça va laisser une trace le long du chemin de la souris.
andredrea
Messages postés
227
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
3 mars 2021
3
7 avril 2016 à 21:47
7 avril 2016 à 21:47
AAAH d'accord en effet je comprend mieux !! Merci beaucoup