2016-12-14 7 views
0

周りペインをドラッグ:JavaFXのは、私はこのコードを使用して、私のJavaのFXアプリケーションでウィンドウのドラッグを有効にしようとしています

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

     }); 

しかし、私はそれをドラッグしようとすると、それはすべての数をドラッグだけでなく、別の場所に表示されます。フレームであるので、2つの場所にあるように見えます。ペインを放すと、これらの場所の1つで終わります。 誰もそれが動作しない理由を知っていますか?

+0

重複している可能性のある[重複していないステージをドラッグしているときにカーソルを強制的にウィンドウの所定位置に保持するにはどうすればよいですか?](http://stackoverflow.com/questions/40953875/how-can-i-force-cursor-to-stay -in-place-on-window-when-undecorated-s) –

答えて

1

MouseEventによって提供される座標は、ローカル座標で提供されます。 translateプロパティを変更すると、オブジェクトの位置が変更され、原点ローカル座標系も移動されます。

これは、翻訳プロパティを減らすと、対応するマウス座標が同じ値だけ増加することを意味します。 translateプロパティを増やすと、次のイベントで対応するマウス座標が減少します。これは、ノードを周りにジャンプさせる。

可能な解決策は、親の座標を使用して、または別の座標変換プロパティによって、またはアカウントに現在の変換プロパティを取ることによって影響されない:

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

注意をオフセットをハードコーディングすることは、第1のノードジャンプを作ることイベントが発生したが、その後のイベントでは発生しなかった。

+0

私はオフセットについて知っている、私はそれをテストしていた、私は値を得るためにevent.getSceneX()を使用することに決めた相対的ではありません。 – tommy

0

私はこの質問はここにDragすでに答えを持っていますが、それを実行するために、次の2つのイベント(PressDrag)ドラッグ自体を実行するために、ドラッグが開始されたところからウィンドウと第二を伝えるために最初のものが必要だと思います。

関連する問題