Bonjour,
je viens ici vous soumettre mon problème car je le trouve vraiment pas banale. Je dois développer un logiciel de dessin en svg à la manière d'inkscape.
Je ne vais évoquer que la partie de mon logiciel qui me pose problème.
Pour avoir une zone de dessin j'ai créé une classe panel qui hérite de JPanel. J'ai aussi crée une classe abstraite Figure qui hérite de JComponent. Ainsi, lorsque je veux créer une figure «*concrète*» un rectangle par exemple, je fais hériter mon rectangle de la classe Figure, je redéfini les méthodes que j'ai besoin et enfin, je l'ajoute à mon panel.
Tout fonctionne très bien, jusqu'a ce que je décide de récupérer les évènements de la souris associé aux figures de mon panel.
Pour ce faire, au moment de l'ajout de la figure à mon panel je l'ajoute aussi à un mouseListener.
Mais, lorsque je clique une fois sur la figure dans mon panel il y au moins 6 évènements mouseClicked de déclenché ...
Une partie de la classe Figure
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 public abstract class FigureWidget extends JComponent { // liste d'attributs d'une figure private String id; private Point origine; private Point dessin; private int width = 1; private int height = 1; private int epaisseurContour = 1; private Color couleurContour = new Color(0, 0, 0); private Color couleurInterieur = new Color(155, 155, 255); private boolean isSelected = false; private String nom; protected final int constTimeResize = 10; protected int testTimeResize = constTimeResize; public abstract void paintComponent(Graphics g); }
Voici une partie du code de la classe panel
Mon listener
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class JPanelEditableZone extends JPanel { /* méthode que j'utilise pour ajouter une figure à mon panel */ public void addWidget() { // figureTmp est une variable de classe de type Figure figureTmp.addMouseMotionListener(listenerWidget); figureTmp.addMouseListener(listenerWidget); super.add(figureTmp); } }
Pour information, j'ai le même problème pour toutes les méthodes du listener. A chaque évènements le méthode correspondante est appelée plusieurs fois. Vous imaginez bien que ce problème est assez gênant.
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 public class ListenerWidget implements MouseListener, MouseMotionListener { private Controleur controleur; public ListenerWidget(final Controleur controleur) { this.controleur = controleur; } public void mousePressed(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) { // cette méthode est apellée plusieurs fois lors d'un clique sur une figure System.out.println("mouse clicked"); } public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public void mouseDragged(MouseEvent event) {} public void mouseMoved(MouseEvent event) {} }
Si vous aviez des idées d'où viens le problème ça m'aiderai beaucoup.
Merci.
Partager