2009-04-16 5 views
5

J'essaie d'implémenter une fonction similaire à un tiroir OS X dans Java, et donc je vais avoir une fenêtre cachée sous une autre. Cependant, lorsque je fais glisser la fenêtre principale (JFrame), j'ai besoin d'envoyer des mises à jour en se déplaçant vers la fenêtre secondaire (JWindow) ci-dessous.Evénements pour faire glisser la fenêtre en Java

Donc, ça serait quelque chose comme ça ...

--------------- 
|    |---------- 
| JFrame |   | 
|    | JWidow | 
|    |   | 
|    |   | 
|    |   | 
|    |----------- 
--------------- 

Cela dit, ComponentListener dans OS X ne pas envoyer des mises à jour constantes pour componentMoved, que lorsque vous faites une pause pour une seconde ou soulevez la souris. Cela semble différer de Win/Linux, donc je me demandais si quelqu'un avait une solution différente. Sans vraiment comprendre tout, j'espérais obtenir et gérer tout ce qui dessine la barre de titre de la fenêtre (quelque chose à propos de la racine, il semble). Je ne suis même pas sûr que cela puisse être possible, mais c'est la seule autre solution que je puisse imaginer pour déterminer quand toute la fenêtre est déplacée.

Toute aide est appréciée!

+0

J'aurais dû préciser, j'utilise un JFrame comme primaire et je prévois d'utiliser un JWindow pour le secondaire. – dustins

Répondre

1

En supposant que vous ayez du code de confiance, vous pouvez utiliser MouseInfo.getPointerInfo() pour obtenir l'emplacement du pointeur. Cette information peut être interrogée afin que vous puissiez déterminer où la fenêtre devrait être. Vous pourriez juste être en mesure d'interroger où la fenêtre est de toute façon.

+0

Je ne sais pas comment cela pourrait être utile. La position du curseur ne semble-t-elle pas aider à savoir quand le JFrame principal est déplacé? J'espérais qu'il soit possible de savoir quand mouseDown est déclenché sur la barre de titre et ensuite de mettre à jour jwindow pos. pour chaque mouseDragged par la suite. – dustins

+2

Vous pouvez savoir où se trouve le pointeur lorsque la fenêtre commence à se déplacer, puis déterminer où il devrait être à partir de là. Bien que vous ne receviez pas l'événement de souris si vous utilisez des cadres décorés non-PL & F. –

1

Pourriez-vous utiliser un mouseMotionListener pour voir si la souris bouge, et si c'est le cas, mettez à jour la position de la seconde fenêtre en utilisant getLocation(). Vous pouvez également vérifier que la position actuelle est égale à la position précédente pour éviter le gaspillage de ressources. Je ne suis pas sûr si getLocation() fonctionnera correctement, cela dépend vraiment de la façon dont le système d'exploitation le gère.

Questions connexes