Deplacement d'un Bouton dan un JPanel
Résolu
manoa21
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
A voir également:
- Deplacement d'un Bouton dan un JPanel
- Historique déplacement google - Guide
- Comment faire une capture d'écran sur un samsung sans bouton ? - Guide
- Impossible d'utiliser l'outil déplacement car la couche de destination est masquée ✓ - Forum Graphisme
- Bouton reinitialisation pc - Guide
- Comment debloquer un bouton enfoncé - Forum Samsung
1 réponse
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