El interface MouseMotionListener y su correspondiente clase adaptador, MouseMotionAdapter, contienen estos métodos:
- void mouseDragged(MouseEvent)
- Llamado en respuesta a un movimiento del ratón por parte del usuario mientras mantiene pulsa uno de los botones delr atón. Este evento es disparado por el componente que disparó el evento mouse-pressed más reciente, incluso si el cursor ya no está sobre ese componente.
- void mouseMoved(MouseEvent)
- Llamado en respuesta a un movimiento del ratón por parte del usuario sin ningún botón puslado. El evento es disparado por el eventos que se encuentra actualmente debajo del cursor.
El siguiente applet contiene un oyente de mouse-motion. Es exactamente igual que el applet de la página Cómo escribir un Oyente de Mouse, excepto en que sustituye MouseMotionListener por MouseListener, e implementa los método mouseDragged y mouseMoved en vez de los método del oyente de mouse. Puedes encontrar el código del applet en MouseMotionEventDemo.java y en BlankArea.java.
Esto es una imagen del GUI del Applet. Para ejecutarlo, pulsa sobre ella. El applet aparecerá en una nueva ventana de tu navegador..
Prueba esto:
- Mueve el cursor dentro del rectángulo amarillo de la parte superior del applet.
Verás uno o más eventos mouse-moved.- Pulsa y mantén un botón de ratón y muevelo hasta que el cursor se salga del rectángulo amarillo.
Verás eventos mouse-dragged.
El siguiente código contiene el manejo de eventos de la clase RectangleDemo.java. Esta clase maneja tres clases de eventos: mouse presses, mouse drags, y mouse releases. Estos eventos corresponden a los método mousePressed (de MouseListener), mouseDragged (de MouseMotionListener), mouseReleased (de MouseListener). Así, esta clase debe implementar tanto MouseListener como MouseMotionListener. Para evitar tener que manejar demasiados métodos vacios, esta clase no implementar MouseListener directamente. En su lugar, extiende MouseAdapter e implementa MouseMotionListener.
...//where initialization occurs: MyListener myListener = new MyListener(); addMouseListener(myListener); addMouseMotionListener(myListener); ... class MyListener extends MouseAdapter implements MouseMotionListener { public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); currentRect = new Rectangle(x, y, 0, 0); repaint(); } public void mouseDragged(MouseEvent e) { updateSize(e); } public void mouseMoved(MouseEvent e) { //Do nothing. } public void mouseReleased(MouseEvent e) { updateSize(e); } void updateSize(MouseEvent e) { int x = e.getX(); int y = e.getY(); currentRect.setSize(x - currentRect.x, y - currentRect.y); repaint(); } }
Cada evento mouse-motion tiene un sólo parámetro -- y no se llama MouseMotionEvent! En su lugar cada evento mouse-motion tiene un método con un argumento MouseEvent. Puedes ver la página La clase MouseEvent para más información sobre cómo utilizar objetos MouseEvent.