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.
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;
}
}