J'ai programme dont un composant a besoin, pour se dessiner correctement, de savoir si la souris est sur le composant, ou pas. Ce composant, en plus, support le drag and drop. Le drag and drop marche bien depuis des mois, mais j'ai un soucis pour mes event souris.
Quand je fais:
Et que je lance un drag and drop, j'obtiens les évènements suivants:
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 addMouseMotionListener(new MouseMotionListener() { private void log(MouseEvent e){ System.out.println(e); } @Override public void mouseMoved(MouseEvent e) { log(e); } @Override public void mouseDragged(MouseEvent e) { log(e); } }); addMouseListener(new MouseListener() { private void log(MouseEvent e){ System.out.println(e); } @Override public void mouseReleased(MouseEvent e) { log(e); } @Override public void mousePressed(MouseEvent e) { log(e); } @Override public void mouseExited(MouseEvent e) { log(e); } @Override public void mouseEntered(MouseEvent e) { log(e); } @Override public void mouseClicked(MouseEvent e) { log(e); } });
Comme on le vois, dès que je lance un drag and drop, je n'ai plus aucun évènement reçu. Du coup je me demande quel event awt je peux rechercher pour savoir que la souris, dans son drag and drop, est sortie du composant.
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 java.awt.event.MouseEvent[MOUSE_ENTERED,(2,52),absolute(180,147),button=0,clickCount=0] on Add stationary (H) java.awt.event.MouseEvent[MOUSE_MOVED,(2,52),absolute(180,147),clickCount=0] on Add stationary (H) java.awt.event.MouseEvent[MOUSE_EXITED,(-73,-11),absolute(105,84),button=0,clickCount=0] on Add stationary (H) java.awt.event.MouseEvent[MOUSE_ENTERED,(35,43),absolute(105,84),button=0,clickCount=0] on Add warm java.awt.event.MouseEvent[MOUSE_MOVED,(35,43),absolute(105,84),clickCount=0] on Add warm java.awt.event.MouseEvent[MOUSE_EXITED,(-70,-30),absolute(0,11),button=0,clickCount=0] on Add warm java.awt.event.MouseEvent[MOUSE_ENTERED,(32,4),absolute(48,45),button=0,clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_MOVED,(32,4),absolute(48,45),clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_MOVED,(40,18),absolute(56,59),clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_MOVED,(36,23),absolute(52,64),clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_MOVED,(31,26),absolute(47,67),clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_MOVED,(29,26),absolute(45,67),clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_MOVED,(28,27),absolute(44,68),clickCount=0] on Add cold java.awt.event.MouseEvent[MOUSE_PRESSED,(28,27),absolute(44,68),button=1,modifiers=Button1,extModifiers=Button1,clickCount=1] on Add cold java.awt.event.MouseEvent[MOUSE_DRAGGED,(32,28),absolute(48,69),modifiers=Button1,extModifiers=Button1,clickCount=0] on Add cold
Je peux capter avec mon code a peu près tous les event, mais je n'ai pas trouvé celui qui m'aidera.
Si ca peu aider, le dnd est géré comme ceci:
Le but ici, c'est de créer un panneau qui se cache quand la souris s'en va, histoire de gagner de la place. Là, je suis obligé après le dnd de revenir vers le panneau puis ressortir...
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 DragSource dragSource = DragSource.getDefaultDragSource(); dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, new DragGestureListener() { @Override public void dragGestureRecognized(DragGestureEvent dge) { getModel().setEnabled(false); getModel().setPressed(false); getModel().setEnabled(true); Transferable t = new Transferable() { DataFlavor[] tr ; { try{ tr = new DataFlavor[] {new DataFlavor(NODE_MIME_TYPE)}; } catch(ClassNotFoundException e){ e.printStackTrace(); } } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { log.debug("Got mimetype {}",flavor.getMimeType()); return flavor.getMimeType().split(";")[0].equals(NODE_MIME_TYPE); } @Override public DataFlavor[] getTransferDataFlavors() { return tr; } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (isDataFlavorSupported(flavor)){ return NodeSource.this; } throw new UnsupportedFlavorException(flavor); } }; dge.startDrag(null, svgIcon.getBufferedImage(),new java.awt.Point(40,40),t,null); }
Partager