2016-12-14 64 views
0

我試圖讓使用此代碼在我的Java FX應用程序中的窗格的拖動:JavaFX的拖動面板周圍

setOnMouseDragged(event -> { 
      setManaged(false); 
      this.setTranslateX(event.getX()-120); 
      this.setTranslateY(event.getY()-50); 
      event.consume(); 

     }); 

但是,當我試圖拖動它,它拖累也出現在另一每隔幾個地方幀,所以它看起來像是在兩個地方,當我放開窗格時,它會在其中一個地方結束。 有誰知道它爲什麼不起作用?

+0

可能的重複[如何強制光標在拖動未修飾階段時保持原位](http://stackoverflow.com/questions/40953875/how-can-i-force-cursor-to-stay -in-place-on-window-when-drag-an-undecorated -s) –

回答

1

座標提供由MouseEvent提供的本地座標。如果您修改了translate屬性,則會修改對象的位置,並且也會移動原點本地座標系。

這意味着減小translate屬性會使相應的鼠標座標增加相同的值。增加translate屬性將減少下一個事件中相應的鼠標座標。這使節點跳轉。

可能的解決方案是使用座標在父母或其他座標不被翻譯財產或利用電流轉換特性考慮因素的影響:

setOnMouseDragged(event -> { 
    setManaged(false); 
    this.setTranslateX(event.getX() + this.getTranslateX() - 120); 
    this.setTranslateY(event.getY() + this.getTranslateY() - 50); 
    event.consume(); 
}); 

需要注意的是硬編碼的偏移使得在第一節點跳事件,但不是在後果事件中。

+0

我知道偏移量,我只是測試它,我決定使用event.getSceneX()來獲取值,這樣它不是相對的。 – tommy

0

我認爲這個問題已經回答這裏Drag,但執行的是,你需要兩個事件(PressDrag)的第一個告訴從拖動已經開始在窗口和第二執行拖本身。