2010-06-14 53 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