Eventos de Usuario: MouseListener y MouseMotionListener

MouseListener

Los eventos de mouse pueden ser generados por cualquier componente añadiendo el vigilante addMouseListener, en general estos eventos son :

  • Click de ratón
  • Entrada del cursor sobre un componente
  • Salida del cursor del mouse sobre un componente

java.awt.event

Interface MouseListener

Métodos:

  • void mousePressed(MouseEvent e)
    • Se invoca cuando el botón del ratón fué pulsado.
  • void mouseReleased(MouseEvent e)
    • Se invoca cuando el botón del ratón fué soltado.
  • void mouseClicked(MouseEvent e)
    • Se invoca cuando el botón del ratón fué pulsado y soltado.
  • void mouseEntered(MouseEvent e)
    • Se invoca cuando el cursor del ratón entró a un componente.
  • void mouseExited(MouseEvent e)
    • Se invoca cuando el cursor del ratón salió de un componente.

Class MouseEvent

java.lang.Object
java.util.EventObject
java.awt.AWTEvent
java.awt.event.ComponentEvent
java.awt.event.InputEvent
java.awt.event.MouseEvent

Métodos:

entre otros:
  • public int getClickCount()
    • Devuelve el número de clicks asociado al evento.
  • public Point getPoint()
    • Devuelve un objeto Point(con coordenas x e y) respecto al componente que generó el evento.
  • public int getX()
    • Devuelve un entero que será la posición horizontal "x" con respecto al componente que generó el evento.
  • public int getY()
    • Devuelve un entero que será la posición vertical "y" con respecto al componente que generó el evento.
  • public int getXOnScreen()
    • Devuelve un entero que será la posición horizontal "x" con respecto a la pantalla.
  • public int getYOnScreen()
    • Devuelve un entero que será la posición vertical "y" con respecto a la pantalla.
  • public Point getLocationOnScreen()
    • Devuelve un objeto Point(con coordenas x e y) con respecto a la pantalla.

MouseMotionListener

Estos eventos de movimiento de mouse tienen lugar cuando el cursor del ratón se mueve sobre un componente. Al igual que antes cualquier componente puede generarlos añadiendo el vigilante addMouseMotionListener().

java.awt.event

Interface MouseMotionListener

Métodos:

  • void mouseDragged(MouseEvent e)
    • Se invoca cuando el botón del ratón fué pulsado sobre un componente y luego se arrastró.
  • void mouseMoved(MouseEvent e)
    • Se invoca cuando el cursor del ratón se ha movido en un componente, pero sin botones han sido pulsados.

Lo objetos Eventos de esta interface sigue siendo "MouseEvent" con sus métodos: getClickCount(), getPoint(), getX(), getY(), etc


AtrapaMouse

El siguiente ejemplo del uso de mouseListener y MouseMotionListener lo tomo de los videos tutoriales de Jesús Conde. Se trata de un pequeño juego de intentar pulsar sobre un botón que se escapa a nuestro cursor del ratón.

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4.  
  5. public class AtrapaMouse extends JFrame implements ActionListener{
  6.     JLabel mensaje = new JLabel("Si puedes...");
  7.     AtrapaPanel atrapa = new AtrapaPanel();
  8.    
  9.     public AtrapaMouse(){
  10.     super("Pulsa en aceptar para cerra la ventana");
  11.     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  12.     setSize(400,200);
  13.     setLocationRelativeTo(null);
  14.     setLayout(new BorderLayout());
  15.     add(BorderLayout.NORTH,mensaje);
  16.     atrapa.aceptar.addActionListener(this);
  17.     add(BorderLayout.CENTER,atrapa);
  18.     setVisible(true);
  19. }
  20.     public void actionPerformed(ActionEvent event){
  21.         System.exit(0);
  22.     }
  23.     public static void main(String[]arguments){
  24.         new AtrapaMouse();
  25.     }
  26.     class AtrapaPanel extends JPanel implements MouseMotionListener{
  27.         JButton aceptar = new JButton("Aceptar");
  28.         int botonX,botonY,ratonX,ratonY;
  29.         int ancho,alto;
  30.        
  31.         AtrapaPanel(){
  32.             super();
  33.             setLayout(null);
  34.             addMouseMotionListener(this);
  35.             botonX = 110; botonY = 110;
  36.             aceptar.setBounds(new Rectangle(botonX,botonY,90,20));
  37.             add(aceptar);
  38.         }
  39.         @Override
  40.         public void mouseMoved(MouseEvent event){
  41.             ratonX = event.getX();
  42.             ratonY = event.getY();
  43.             ancho = (int)getSize().getWidth();
  44.             alto = (int)getSize().getHeight();
  45.            
  46.             if(Math.abs((ratonX 35)- botonX)<50){
  47.                 botonX = moverBoton(ratonX,botonX,ancho);
  48.                 repaint();
  49.             }
  50.             if(Math.abs((ratonY 10)- botonY) <50){
  51.                 botonY = moverBoton(ratonY,botonY,alto);
  52.                 repaint();
  53.             }
  54.         }
  55.        
  56.         public void mouseDragged(MouseEvent event){
  57.             //ignored this event
  58.         }
  59.         private int moverBoton(int ratonAt, int botonAt,int borde){
  60.             if(botonAt < ratonAt){
  61.                 botonAt--;
  62.             } else {
  63.                 botonAt++;
  64.             }
  65.             if (botonAt > (borde - 20)){
  66.                 botonAt = 20;
  67.             }
  68.             if(botonAt < 0){
  69.                 botonAt = borde - 80;
  70.             }
  71.             return botonAt;
  72.         }
  73.        
  74.         public void paintComponent(Graphics comp){
  75.             super.paintComponent(comp);
  76.             aceptar.setBounds(botonX,botonY,90,20);
  77.         }
  78.     }
  79. }

No hay comentarios:

Publicar un comentario