2010-06-14 73 views
1

我想创建一个(孩子)的JFrame从第二(父)的一侧JFrame的下方滑出。目标是让孩子在移动时跟随父母,并对调整事件作出响应。这与question有些相关。获得一个JFrame的实际当前位置

我已经使用的ComponentListener尝试过,但用这种方法,仅一个儿童移动一旦父母已经停下来,而我想孩子移动的母公司是在屏幕上拖动。

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

有没有办法让即使是在一拖之中一个JFrame的真正实际位置?或者如果没有,是否有办法让页面从底部滑出并跟随框架?

+1

我在拖动框架(在Vista上)时获取componentMoved事件。你使用的是什么OS/JRE? – Ash 2010-06-14 05:14:07

+0

mac os 10.4.11 with java 1.5.0_19 – 2010-06-14 05:44:09

+0

好的,这可能是操作系统的差异。我只是将一个带有通过ComponentListener连接到主框架的“跟随者”框架的小应用程序扔在一起,拖动时它可以正常工作。 – Ash 2010-06-14 06:00:11

回答

0

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

如果您看到'滞后'或者在主窗口停止后不重新定位,尝试通过在重新定位后调用第二个窗口上的repaint()来重绘重绘和/或将重定位代码放入SwingUtilities .invokeLater(...)block:

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

让我知道这是否有帮助。

0

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

+0

您能否更具体地了解如何获得初始位置并确定阻力何时停止? – 2010-06-14 17:22:01