【问题标题】:Events For Window Dragging in JavaJava中窗口拖动的事件
【发布时间】:2010-10-19 21:58:26
【问题描述】:

我正在尝试在 Java 中实现一个类似于 OS X 抽屉的功能,因此我将一个窗口隐藏在另一个窗口下。但是,当我拖动主窗口 (JFrame) 时,我需要在它移动到下面的辅助窗口 (JWindow) 时发送更新。

所以应该是这样的……

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

也就是说,OS X 中的 ComponentListener 不会为 componentMoved 发送持续更新,只有当您暂停一秒钟或松开鼠标时。这似乎与 Win/Linux 不同,所以我想知道是否有人有不同的解决方案。

在没有完全理解所有内容的情况下,我希望能够获取并处理绘制窗口标题栏的任何内容(似乎是关于根窗格的内容)。我什至不确定这是否可行,但这是我能想到的确定何时拖动整个窗口的唯一其他解决方案。

感谢任何帮助!

【问题讨论】:

  • 我应该指定,我使用 JFrame 作为主要,并计划使用 JWindow 作为次要。

标签: java macos listener


【解决方案1】:

假设您有受信任的代码,您可以使用MouseInfo.getPointerInfo() 来获取指针的位置。可以轮询此信息,以便您可以确定窗口应该在哪里。无论如何,您也许只能轮询窗口的位置。

【讨论】:

  • 我不确定这会有什么帮助。光标位置似乎无助于了解主 JFrame 何时被移动,不是吗?我希望有可能知道何时在标题栏上触发 mouseDown,然后更新 jwindow pos。之后每拖动一个鼠标。
  • 您可以在窗口开始移动时找出指针所在的位置,然后从那里计算出它应该在哪里。虽然如果您使用非 PL&F 装饰的框架,您实际上不会获得鼠标按下事件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2010-12-31
    • 2015-03-24
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多