2010-05-31 5 views
6

Ich schreibe eine Java Swing-Anwendung, die ein Mausbewegungsereignis für Fenster empfangen muss, wenn die Anwendung nicht aktiviert ist - denken Sie daran wie eine globale Immer-Oben-Symbolleiste animiert, wenn die Maus darüber fährt.Mac OSX Java: Mausereignisse empfangen, wenn sie nicht aktiviert sind

Aus meiner bisherigen Forschung habe ich gesehen, dass die Mac Java JRE nur Ereignisse übergibt, wenn die Anwendung den Fokus hat.

Es scheint keine Einschränkung des Betriebssystems zu sein, also hoffte ich, dass es eine Systemeigenschaft, eine Anwendungspaketeigenschaft oder einen Systemaufruf gab, der die nicht aktivierte Ereignisbehandlung ermöglichte. Andernfalls gibt es eine Methode, um Mausbewegungsereignisse global zu erfassen und an die Java-Anwendung weiterzuleiten.

Vielen Dank für alle Anregungen ...

Edit: Ein weitere Frage: Sobald Mausbewegungsereignisse erfaßt wurden, wie man sie in Schwingen füttern, so dass sie in den gleichen als native OS Mausereignisse behandelt - indem Sie die Komponente unter der Maus finden und ein MouseEvent an sie senden ...

Antwort

2

Dies ist mit reinem Java nicht möglich.
Sie benötigen JNI und einen globalen Keylistener (oder keyboard hook) in C++ oder einer anderen Sprache zu schreiben.

Hier sind einige Themen über Global KeyListener:

Am letzten Thema: this war eine bestimmte Lösung für OSX.

+0

Danke, ich hatte Angst, dass dies der Fall wäre. Hinweise zum Eingeben der erfassten Ereignisse zurück in die Java-Anwendung, sodass Swing sie so behandelt, als ob sie vom Betriebssystem stammen würden (indem die Komponente unter der Maus gefunden und ein MouseEvent gesendet wird). – CuriousPanda

+0

Sorry, aber ich habe kein Mac OSX, also kann ich es nicht versuchen. Ich habe ein wenig gegoogelt, mit dem Wissen der Begriffe 'JNI' und' Keyboardhook'. –

Verwandte Themen