Calcular o tempo que o Mouse fica parado

Olá pessoal, estou com um grande problema.

Estou tentando implementar os métodos do MouseEvent porque preciso saber quando o mouse se meche e quando ele para.

Até agora eu sei quando ele se meche com o public void mouseMoved(MouseEvent e) {} agora preciso saber quando ele para.

O objetivo disso ai é conseguir calcular quanto tempo a pessoa ficou parada com o mouse. Eu já consegui fazer isso com os outros métodos como segue abaixo.

@Override
public void mousePressed(MouseEvent e) {
tempoInicial = System.currentTimeMillis();
System.out.println(“precionou”);
tempoFinalParado = System.currentTimeMillis();
System.out.println("Tempo parado "+tempoParado(tempoInicialParado, tempoFinalParado));
}

@Override
public void mouseReleased(MouseEvent e) {
tempoFinal = System.currentTimeMillis();
tempoInicialParado = tempoFinal;
System.out.println("soltou " + tempoFinal);
System.out.println("Tempo decorrido foi de " + tempoDecorrido(tempoInicial, tempoFinal));
}

simples…
você pode:
Consultar uma biblioteca das funções do mouse pesquisando sobre o mouse parado…

OU

pode ser registrado o ultimo movimento, assim que ele mover o mouse novamente você verifica o tempo entre um movimento e o ultimo.

:slight_smile:

se for mandar mensagem de aviso ele teria que mecher o mouse de qualquer maneira…

Eu ja pesquisei sobre o mouse parado mas até agora não encontrei nada a respeito.

Rode a aplicação abaixo. Ele só consegue contar o tempo se o mouse estiver dentro do frame, é lógico. (MouseMoved não consegue pegar os eventos fora do JFrame).

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class ExemploMouseParado extends JFrame {
    private JLabel lblTempoParado;
    private Timer timer;
    private long startTime;

    private Timer getTimer() {
        return new Timer(100, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                long currentTime = System.currentTimeMillis();
                lblTempoParado.setText(String.format("Tempo parado: %d ms", currentTime - startTime));
            }
        });
    }

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploMouseParado frame = new ExemploMouseParado();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploMouseParado() {
        addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                startTime = System.currentTimeMillis();
            }
        });
        setTitle("Exemplo Mouse Parado");
        setBounds(100, 100, 450, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().add(getLblTempoParado(), BorderLayout.NORTH);
        startTime = System.currentTimeMillis();
        getTimer().start();
    }

    private JLabel getLblTempoParado() {
        if (lblTempoParado == null) {
            lblTempoParado = new JLabel("Tempo parado:");
        }
        return lblTempoParado;
    }
}