Eu estou fazendo um programa em Java e eu preciso capturar o click do mouse em qualquer lugar da tela. Eu só preciso saber se o usuário clicou. Não importa no que e nem onde, só preciso saber disso. Eu já tentei assim:
private static class Listener implements AWTEventListener {
public void eventDispatched(AWTEvent event) {
if (event.getID() == MouseEvent.MOUSE_CLICKED) {
System.out.println("clicou!");
}
}
}
`
E daí no construtor da classe eu adiciono isso:
Toolkit.getDefaultToolkit().addAWTEventListener(
new Listener(), AWTEvent.MOUSE_EVENT_MASK);
Porém isso só funciona se meu programa estiver em foco. Alguém sabe o que eu posso fazer?
Com a API do Java não é possível interceptar os cliques do mouse fora de sua interface gráfica de usuário.
Você terá que usar código nativo pra tratar interrupções do mouse ou mensagem específicas do sistema operacional.
Eu teria que utilizar outra linguagem para fazer meu programa?
Na verdade é possivel, mas limitado, veja:
Exatamente
Você até pode continuar com o JAVA e usar JNI ou JNA, mas a parte nativa você fará em uma linguagem que gere código nativo.
Esse exemplo explica que você só consegue capturar o evento do mouse ao clicar fora da tela na primeira vez (é o evento que causa a perda do foco da janela).
E outro cara sugere criar uma janela transparente do tamanho da área visível do display, mas isso também não vai funcionar pois essa janela teria que funcionar como um proxy e propagar cada evento do mouse para o sistema operacional, o que só dá pra fazer com código nativo.
Eu preciso desta aplicação pronta o quanto antes e eu só sei o básico de C. Acho que melhor do que fazer tudo de novo seria usar JNI mesmo. Muito obrigado pela ajuda.
1 curtida