2017-01-11 14 views
0

ドラッグで移動するための単純な四角形を取得しようとしています。私はそれを動かしているが、再びドラッグしようとすると、最初のドラッグの前に元の位置に戻る。 StackPane、FlowPane、Pane、AnchorPaneを試してみました。ドラッグ時のシェイプの移動Javafx - シェイプがリセットを維持する

public View getView() { 
     View view = new View("Test View"); 
     view.setName(name); 
     Pane pane = new Pane(); 

     rect.setOnMousePressed((MouseEvent me) -> { 
      xVal = me.getSceneX(); 
      yVal = me.getSceneY(); 
      System.out.println("PRESSED_" + Double.toString(rect.getX())); 
     }); 

     rect.setOnMouseReleased((MouseEvent me) -> { 
      System.out.println("RELEASE_" + Double.toString(rect.getX())); 
     }); 

     rect.setOnMouseDragged((MouseEvent me) ->{ 
      final double diffX = me.getSceneX() - xVal; 
      final double diffY = me.getSceneY() - yVal; 
      System.out.println("SET_" + Double.toString(rect.getX())); 
      rect.setX(diffX); 
      rect.setY(diffY); 
     }); 

     pane.getChildren().add(rect); 
     view.setCenter(pane); 
     return view; 
    } 

注:rectxValyValは、すべてのクラスのプロパティです。

問題は、矩形をうまく動かすことができることです。しかし、私が再び移動しようとすると、矩形は矩形の元の点に戻るようです。あなたはそれを元に戻すように思われる次の画像で見ることができます:

​​

注:diffXdiffYfinalであるという事実は、ここでの問題ではありません。

別注:私もそう、私はそれを周りいじっていたと私がいることを私が押し下げたびにそれを考え出し、XとY座標

答えて

0

OK ... setTranslate()などgetTransforms().add()を試してみましたの長方形は、(0,0)に校正されています。だから私がしなければならなかったのは、最初のマウス・プレス・イベントでxValyValを0に設定することでした。しかし、これによりxValyValは簡単になります。したがって、それらを削除することができます。これが最善の解決策であるかどうかは分かりませんが、それは私にとってはうまくいきます:

rect.setOnMousePressed((MouseEvent me) -> { 
     System.out.println("PRESSED_" + Double.toString(rect.getX())); 
    }); 

    rect.setOnMouseReleased((MouseEvent me) -> { 
     System.out.println("RELEASE_" + Double.toString(rect.getX())); 
    }); 

    rect.setOnMouseDragged((MouseEvent me) ->{ 
     double diffX = me.getX() - rect.getWidth()/2; 
     double diffY = me.getY() - rect.getHeight()/2; 
     System.out.println("SET_" + Double.toString(rect.getX())); 
     rect.setX(diffX); 
     rect.setY(diffY); 
    }); 
+1

xValとyValを削除できるようです。 – Sedrick

関連する問題