tags:

views:

77

answers:

1

I am writing a Java Swing application that needs to have a window receive mouse movement events when the application is not activated - think of it like a global always-on-top toolbar that animates when the mouse passes over it.

From my research so far, I have seen that the Mac Java JRE only passes events when the application has focus.

It does not appear to be a limitation of the OS, so I was hoping that there was a system property, an application package property or a system call that enabled non-activated event handling. Failing that, some method of globally capturing mouse movement events and passing them in to the Java application.

Thanks for any suggestions...

Edit: One further question: Once mouse move events have been captured, how do you feed them into Swing so that they are treated in the same was as native OS mouse events -- by finding the component under the mouse and sending a MouseEvent to it...

+2  A: 

This isn't possible with pure Java.
You will need JNI and to write a global keylistener (or a keyboard hook) in C++ or another language.

Here are some topics about Global KeyListener:

On the last topic: this was a given solution for OSX.

Martijn Courteaux
Thanks, I was afraid that this would be the case.Any hints on feeding the captured events back to the Java application, so that Swing will treat them as if they came from the OS (by finding the component under the mouse and sending a MouseEvent to it).
CuriousPanda
Sorry, but I don't have a Mac OSX, so I can't try it. I just Googled a bit, with the knowledge of the terms `JNI` and `Keyboard hook`.
Martijn Courteaux