Pourquoi mouseDragged-événements qui ne sont pas reçus lors de l'utilisation de MouseAdapter?
Pourquoi mouseDragged
-uniquement sur les événements reçus lors de l'utilisation de MouseMotionAdapter
et non pas lors de l'utilisation de MouseAdapter
?
Java a deux adaptateur abstrait classes pour la réception de la souris-événements ;
MouseAdapter
et MouseMotionAdapter
.
Les deux classes ont un mouseDragged(MouseEvent e)
-méthode, mais l'
l'un dans MouseAdapter
ne semble pas fonctionner ; mouseDragged
-événements
ne jamais obtenir avec celui-ci.
Les deux classes implémentent l' MouseMotionListener
-interface
définit la mouseDragged
-événement, donc je ne comprends pas pourquoi il est
ne fonctionne pas correctement sur les deux.
Voici un exemple de code qui illustre ce problème :
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
public class SwingApp extends JFrame
{
public SwingApp()
{
//No mouseDragged-event is received when using this :
this.addMouseListener(new mouseEventHandler());
//This works correct (when uncommented, of course) :
//this.addMouseMotionListener(new mouseMovedEventHandler());
setBounds(400,200, 550,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static void main(String args[])
{
new SwingApp();
}
class mouseEventHandler extends MouseAdapter
{
@Override
public void mouseDragged(MouseEvent e) //Why is this method never called ?
{
System.out.println(String.format("MouseDragged via MouseAdapter /X,Y : %s,%s ", e.getX(), e.getY()));
}
}
class mouseMovedEventHandler extends MouseMotionAdapter
{
@Override
public void mouseDragged(MouseEvent e)
{
System.out.println(String.format("MouseDragged via MouseMotionAdapter /X,Y : %s,%s ", e.getX(), e.getY()));
}
}
}
OriginalL'auteur Tim | 2011-04-07
Vous devez vous connecter pour publier un commentaire.
Si vous les ajoutez à travers
vous ne recevrez pas de mouvements liés
MouseEvents
(ce n'est pas ce que vous avez enregistré le port d'écoute!)Vous devrez ajouter l'écouteur deux fois, c'est à dire, les ajouter à l'aide
addMouseMotionListener
ainsi:afin d'obtenir à la fois du type d'événements.
(Un côté nœud, toujours utiliser un capital de première lettre de vos classes, c'est à dire, utiliser
MouseEventHandler
au contraire 🙂OriginalL'auteur aioobe
tu dois ajouter votre MouseAdapter que les deux mouseListener et mouseMotionListener, et vous serez d'or. MouseAdapter implémente à la fois MouseListener et MouseMotionListener, mais votre composant ne sais pas à passer mouseDragged événements, à moins que vous appelez addMouseMotionListener
OriginalL'auteur iluxa