2009-04-16 61 views
5

我试图在Java中实现OS X抽屉一样的功能,所以我将有一个窗口隐藏在另一个窗口下。但是,当我拖动主窗口(JFrame)时,我需要发送更新,因为它将移动到下面的辅助窗口(JWindow)。在Java中拖动窗口的事件

所以它会是这样的......

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

这就是说,在的ComponentListener OS X不适合的componentMoved发送不断更新,只有当你停下来第二次或脱离鼠标。这似乎与Win/Linux不同,所以我想知道是否有人有不同的解决方案。如果没有完全理解所有的东西,我希望得到和处理任何正在绘制窗口标题栏的东西(关于它的根叶片的一些东西)。我甚至不确定这是否有可能实现,但它是唯一可以考虑的其他解决方案,以确定整个窗口被拖动的时间。

任何帮助表示赞赏!

+0

我应该指定,我使用的JFrame作为主要和计划使用JWindow的辅助。 – dustins 2009-04-16 17:05:43

回答

1

假设您有可信的代码,您可以使用MouseInfo.getPointerInfo()来获取指针的位置。这些信息可以被轮询,以便您可以确定窗口的位置。无论如何,您可能只是能够查询窗口的位置。

+0

我不确定这会有帮助。光标位置似乎无助于了解主JFrame何时被移动了吗? 我希望有可能知道什么时候在标题栏上触发mouseDown,然后更新jwindow pos。对于其后的每个mouseDragged。 – dustins 2009-04-16 17:33:32

1

您可以使用mouseMotionListener查看鼠标是否在移动,如果是,则使用getLocation()更新第二个窗口的位置。您还可以检查当前位置是否与之前的位置相同,以防止浪费资源。我不确定getLocation()是否能够正常工作,但它确实取决于操作系统如何处理它。