获取JFrame的实际当前位置

时间:2010-06-14 05:08:24

标签: java user-interface macos swing jframe

我正在尝试创建一个(子)JFrame,它从第二个(父)JFrame的一侧滑出。目标是让孩子在移动时跟随父母,并响应调整大小事件。这与此question有点相关。

我尝试过使用ComponentListener,但是使用这种方法,子进程只有在父进程停止后才会移动,而我希望子进程在父进程被拖动时移动。

我尝试的另一个选项是启动一个新的刷新线程,该线程使用getLocation()或getLocationOnScreen()不断更新子位置,但滞后与ComponentListener相同。

有没有办法即使在拖动过程中获取JFrame的真实实际位置?或者,如果没有,有没有办法让一张纸从下面滑出并沿着框架移动?

2 个答案:

答案 0 :(得分:0)

如果它在Mac上不起作用,你也可以在拖动开始时存储初始位置,然后窗口的位置是initialPosition +鼠标移动。

答案 1 :(得分:0)

您应该使用MouseAdapter类的mouseDragged(MouseEvent e)方法。 当您拖动主窗口时,您将获得许多这些mouseDragged事件 - 通过将第二个窗口移动到相对于主窗口位置的位置来处理每个事件。

如果您看到'滞后'或者在主窗口停止之前它没有重新定位,请尝试通过在重新定位后调用第二个窗口上的repaint()和/或将重新定位代码放在SwingUtilities中来强制重绘Swing。 invokeLater(...)块:

SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        // your logic here
    }
});

如果有帮助,请告诉我。