Na verdade a aplicação mouse analyzer pode ser útil na programação de jogos onde você quer saber sobre as atividades do mouse ou a atual posição do mouse.

Vamos falar sobre um programa que pode ser muito útil para os trabalhos que exigem bom conhecimento das coordenadas de tela e programação de jogos.

Com esse programa você pode:

  • Rastrear as coordenadas do mouse atual.
  • Determinar evento como Mouse Clicks, Mouse Pressed, e Mouse Dragged etc.

Vamos começar a ver como fazemos isso acontecer. Primeiro nós incluiremos todas as importações:

 
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
Listagem 1. Incluindo todas as importações

Agora, vamos discutir sobre essas importações:

  • Dimension class é usada para armazenar as coordenadas; para nosso programa, armazenará o tamanho da tela coordenadas na Dimension object.
  • FlowLayout é o layout de todos os componentes do quadro
  • ToolKit é usado para obter o tamanho da tela
  • MouseEvent diz se um evento irá ocorrer dentro do componente do quadro.
  • MouseListener e MouseMotionListener são usados para receptar qualquer evento do mouse como o clique do mouse, arraste etc.
  • JFrame é usado para definir um quadro
  • JLabel é utilizado para definir um rótulo

Agora vamos ver como fazemos para definir o método main no nosso exemplo.


public class MouseTracker  extends JFrame
implements MouseListener, MouseMotionListener {
 
    JLabel mousePosition;
public static void main(String args[])
    {
        new MouseTracker().start();
         
    }
Listagem 2. Definindo a classe e método main

O nome da classe é MouseTracker, e ela implementa as classes MouseListener e MouseMotionListener que são usados para receptar qualquer evento do mouse como o clique, arrastar, etc. Isso é feito implementando os métodos destas interfaces, mas iremos definir os métodos mais tarde.

Podemos definir uma JLabel com o nome mousePosition que é usada para mostrar notificações nas atuais coordenadas do mouse, definir o método principal e chamar o método start, que irá conter todo o processamento.

Agora iremos implementar os métodos dentro dessas interfaces.


@Override
public void mouseClicked(MouseEvent e) {
    mousePosition.setText("Mouse clicked at coordinate : 
    ["+e.getX()+","+e.getY()+"]");     
} 
@Override
public void mouseEntered(MouseEvent e) {
    mousePosition.setText("Current mouse Coordinates : 
    ["+e.getX()+","+e.getY()+"]");     
} 
@Override
public void mouseExited(MouseEvent e) {
    mousePosition.setText("Mouse outside access window");     
} 
@Override
public void mousePressed(MouseEvent e) {
    mousePosition.setText("Mouse pressed at coordinates : 
    ["+e.getX()+","+e.getY()+"]");     
} 
@Override
public void mouseReleased(MouseEvent e) {
    mousePosition.setText("Current mouse coordinates : 
    ["+e.getX()+","+e.getY()+"]");     
} 
@Override
public void mouseDragged(MouseEvent e) {
    mousePosition.setText("Mouse dragged at coordinates : 
    ["+e.getX()+","+e.getY()+"]"); 
} 
@Override
public void mouseMoved(MouseEvent e) {
    mousePosition.setText("Mouse moved to coordinates : 
    ["+e.getX()+","+e.getY()+"]");     
}
Listagem 3. Definindo métodos das interfaces

Abaixo teremos uma explicação detalhada do código da listagem 3:

  • Todos os métodos contêm um argumento do tipo MouseEvent que contêm as dados, como informações de coordenadas do mouse.
  • O getX() e getY() são usado para obter as coordenadas x e y do mouse.
  • Método mouseClicked é chamado uma vez que há um movimento do mouse dentro do quadro.
  • Método mouseEntered é chamado quando o mouse vem de uma janela exterior ao quadro.
  • Método mouseExited é chamado quando o mouse passa fora do quadro i.e. JFrame
  • Método mousePressed é chamado quando o mouse é pressionado.
  • Método mouseReleased é chamado quando o botão do mouse é liberado.
  • Método mouseDragged é chamado quando o mouse é arrastado
  • Método mouseMoved é chamado quando o mouse é mouse de localização.

Na listagem 4 iremos definir o método start.

 
public void start()
    {
        mousePosition=new JLabel();
         addMouseListener( this );        // listens for own mouse and
          addMouseMotionListener( this );  // mouse-motion events
          setLayout(new FlowLayout(1));
          add(mousePosition);
          Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
          setSize(size );
          setUndecorated(true);
          setVisible( true );
          setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
Listagem 4. Definindo o método start

Nós adicionamos o mouseListener em nosso quadro, para que sempre que qualquer evento do mouse ocorrer dentro do quadro, ele poderá ser reportado.

  • Definimos o layout do quadro como FlowLayout e adicionamos o JLabel no frame.
  • Podemos obter o tamanho da tela usando o método: Toolkit.getDefaultToolkit().getScreenSize().
  • Definimos o tamanho do quadro como o tamanho da tela para que o quadro seja quadro de tamanho completo.
  • Podemos definir o quadro como Undecorated para que o quadro não tenha nenhuma barra de título.
  • Podemos definir a visibilidade do quadro como true.
  • Definimos o setDefaultCloseOperation como EXITONCLOSE para que o programa fique fechado quando o quadro é fechado.

Abaixo podemos ver o código-fonte completo do nosso exemplo:


import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class MouseTracker  extends JFrame
implements MouseListener, MouseMotionListener {
 
    JLabel mousePosition;
    @Override
    public void mouseClicked(MouseEvent e) {
        mousePosition.setText("Mouse clicado na coordenada : ["+e.getX()+","+e.getY()+"]");
         
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        mousePosition.setText("Coordenada atual do mouse : ["+e.getX()+","+e.getY()+"]");
         
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        mousePosition.setText("O Mouse está fora da janela de acesso");
         
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        mousePosition.setText("Mouse pressionado nas coordenadas : ["+e.getX()+","+e.getY()+"]");
         
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        mousePosition.setText("Coordenada atual do mouse : ["+e.getX()+","+e.getY()+"]");
         
    }
 
    @Override
    public void mouseDragged(MouseEvent e) {
        mousePosition.setText("Mouse arrastado nas coordenadas : ["+e.getX()+","+e.getY()+"]");
         
    }
 
    @Override
    public void mouseMoved(MouseEvent e) {
        mousePosition.setText("Mouse movido para as coordenadas : ["+e.getX()+","+e.getY()+"]");
         
    }
 
    public static void main(String args[])
    {
        new MouseTracker().start();
         
    }
    public void start()
    {
        mousePosition=new JLabel();
         addMouseListener( this );        // listens for own mouse and
          addMouseMotionListener( this );  // mouse-motion events
          setLayout(new FlowLayout(1));
          add(mousePosition);
          Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
          setSize(size );
          setUndecorated(true);
          setVisible( true );
          setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
Listagem 5. Código-fonte completo da aplicação

Conclusão

Nesse artigo vimos como obter dados de interação do usuário que são muito importantes em alguns campos do desenvolvimento, como o desenvolvimento de jogos, por exemplo.

Assim temos um exemplo que podemos usar como modelo para diversas aplicações que precise capturar quaisquer ações do mouse.

Espero que tenham gostado e até a próxima.

Artigo traduzido e originalmente publicado em MrBool