Deplacement d'un Bouton dan un JPanel
Résolu/Fermé
manoa21
Messages postés
9
Date d'inscription
dimanche 3 juin 2012
Statut
Membre
Dernière intervention
20 juin 2012
-
10 juin 2012 à 12:16
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 10 juin 2012 à 17:30
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 10 juin 2012 à 17:30
A voir également:
- Deplacement d'un Bouton dan un JPanel
- Historique déplacement google - Guide
- Réinitialiser chromecast sans bouton - Guide
- Hard reset samsung sans bouton home - Guide
- Bug bouton volume xiaomi - Forum Xiaomi
- Bouton d'alimentation - Guide
1 réponse
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
Modifié par KX le 10/06/2012 à 17:35
Modifié par KX le 10/06/2012 à 17:35
J'aimerais bien savoir pourquoi tu as mis ton code dans paintComponent !
En gros tu créés un nouveau bouton à chaque fois que la fenêtre est rafraîchi, tu te retrouves donc avec des centaines de boutons qui seront tous initialisés au même endroit (avec setBounds) et déplacés selon le listener alors que le bouton déplacé aura une origine qui dépendra du dernier bouton créé (et non de celui que tu es en train de déplacer !)
De plus, la première instruction à mettre dans un paintComponent, c'est de rappeler la méthode de la classe mère... sinon le rafraichissement ne se fait pas et tu as des traces qui se promènent.
Enfin, pour être cohérent, il vaut mieux figer les valeurs des getX/getY dans une variable avant de faire tes tests et tes modifications, car elles peuvent changer au cours du calcul, et faire des résultats bizarres (en plus c'est plus clair)
Une dernière remarque : il serait judicieux d'initialiser la position de ton bouton à l'intérieur de la zone sur laquelle tu l'autorises à se déplacer... sinon le déplacement de départ va être bloqué si tu ne te déplaces pas au moins vers la zone autorisée.
La confiance n'exclut pas le contrôle
En gros tu créés un nouveau bouton à chaque fois que la fenêtre est rafraîchi, tu te retrouves donc avec des centaines de boutons qui seront tous initialisés au même endroit (avec setBounds) et déplacés selon le listener alors que le bouton déplacé aura une origine qui dépendra du dernier bouton créé (et non de celui que tu es en train de déplacer !)
De plus, la première instruction à mettre dans un paintComponent, c'est de rappeler la méthode de la classe mère... sinon le rafraichissement ne se fait pas et tu as des traces qui se promènent.
Enfin, pour être cohérent, il vaut mieux figer les valeurs des getX/getY dans une variable avant de faire tes tests et tes modifications, car elles peuvent changer au cours du calcul, et faire des résultats bizarres (en plus c'est plus clair)
Une dernière remarque : il serait judicieux d'initialiser la position de ton bouton à l'intérieur de la zone sur laquelle tu l'autorises à se déplacer... sinon le déplacement de départ va être bloqué si tu ne te déplaces pas au moins vers la zone autorisée.
import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JButton; import javax.swing.JPanel; public class Panneau extends JPanel { private static final long serialVersionUID = 1L; public static JButton pole1; public Panneau() { pole1=new JButton("bouton"); pole1.setBounds(100,240, 10, 10); // TODO pole1.setBackground(Color.RED); pole1.addMouseMotionListener(new MouseMotionListener() { private int dx,dy; public void mouseDragged(MouseEvent e) { int x = pole1.getX()+e.getX()-dx; int y = pole1.getY()+e.getY()-dy; if (x>=35 && x<375 && y>=50 && y<390) { pole1.setLocation(x, y); } } public void mouseMoved(MouseEvent e) { dx = e.getX(); dy = e.getY(); } }); add(pole1); } // public void paintComponent(Graphics g) // { // super.paintComponent(g); // } }
La confiance n'exclut pas le contrôle