我正在尝试创建一个(子)JFrame,它从第二个(父)JFrame的一侧滑出。目标是让孩子在移动时跟随父母,并响应调整大小事件。这与此question有点相关。
我尝试过使用ComponentListener,但是使用这种方法,子进程只有在父进程停止后才会移动,而我希望子进程在父进程被拖动时移动。
我尝试的另一个选项是启动一个新的刷新线程,该线程使用getLocation()或getLocationOnScreen()不断更新子位置,但滞后与ComponentListener相同。
有没有办法即使在拖动过程中获取JFrame的真实实际位置?或者,如果没有,有没有办法让一张纸从下面滑出并沿着框架移动?
答案 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
}
});
如果有帮助,请告诉我。