Javafx 2 JavaFX2:拖动事件开始和结束坐标

Javafx 2 JavaFX2:拖动事件开始和结束坐标,javafx-2,mouseevent,drag,Javafx 2,Mouseevent,Drag,我有一个节点(ImageView)显示图像,另一个节点(矩形)位于图像顶部。我需要的行为是,当鼠标在矩形上拖动(按下拖动释放手势)时,两个节点应该协调地移动。我的思考过程如下: •沿拖动方向将两个节点移动相同距离 对于这个选项(可能有更多选项),我需要鼠标拖动开始和结束之间的距离。我尝试捕获拖动的开始和结束坐标,但没有成功。我想我正在迷失在要实现的处理程序中 我的代码如下: import javafx.event.EventHandler; import javafx.geometry.Rect

我有一个节点(ImageView)显示图像,另一个节点(矩形)位于图像顶部。我需要的行为是,当鼠标在矩形上拖动(按下拖动释放手势)时,两个节点应该协调地移动。我的思考过程如下:

•沿拖动方向将两个节点移动相同距离

对于这个选项(可能有更多选项),我需要鼠标拖动开始和结束之间的距离。我尝试捕获拖动的开始和结束坐标,但没有成功。我想我正在迷失在要实现的处理程序中

我的代码如下:

import javafx.event.EventHandler;
import javafx.geometry.Rectangle2D;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;

public class MyView
{

    double    mouseDragStartX;
    double    mouseDragEndX;

    double    mouseDragStartY;
    double    mouseDragEndY;

    ImageView imageView;

    public MyView()
    {
        imageView = new ImageView("C:\\temp\\test.png");
    }

    private void setRectangleEvents(final MyObject myObject)
    {
        myObject.getRectangle().setOnMousePressed(new EventHandler<MouseEvent>()
        {
            @Override
            public void handle(MouseEvent mouseEvent)
            {
                mouseDragStartX = mouseEvent.getX();
                mouseDragStartY = mouseEvent.getY();
                mouseEvent.consume();
            }
        });

        myObject.getRectangle().setOnMouseReleased(new EventHandler<MouseEvent>()
        {
            public void handle(MouseEvent mouseEvent)
            {
                mouseDragEndX = mouseEvent.getX();
                mouseDragEndY = mouseEvent.getY();
                myObjectDraggedHandler();
            }
        });
    }

    private void myObjectDraggedHandler()
    {

    Rectangle2D viewport = this.imageView.getViewport();
    double newX = this.imageView.getImage().getWidth()
        + (mouseDragEndX - mouseDragStartX);
    double newY = this.imageView.getImage().getHeight()
        + (mouseDragEndY - mouseDragStartY);

        this.imageView.setViewport(new Rectangle2D(newX, newY, viewport.getWidth(),     viewport
            .getHeight()));

    }
}
导入javafx.event.EventHandler;
导入javafx.geometry.Rectangle2D;
导入javafx.scene.image.ImageView;
导入javafx.scene.input.MouseEvent;
公共类MyView
{
双鼠标RAGSTARTX;
双鼠标;
双鼠袋鼠;
双鼠标代理;
图像视图图像视图;
公共MyView()
{
imageView=新的imageView(“C:\\temp\\test.png”);
}
私有void setRectangleEvents(最终MyObject MyObject)
{
myObject.getRectangle().setOnMousePressed(新的EventHandler())
{
@凌驾
公共无效句柄(MouseEvent MouseEvent)
{
mouseDragStartX=mouseEvent.getX();
mouseDragStartY=mouseEvent.getY();
mouseEvent.consume();
}
});
myObject.getRectangle().setOnMouseReleased(新的EventHandler())
{
公共无效句柄(MouseEvent MouseEvent)
{
mouseDragEndX=mouseEvent.getX();
mouseDragEndY=mouseEvent.getY();
myObjectDraggedHandler();
}
});
}
私有void myObjectDraggedHandler()
{
Rectangle2D viewport=this.imageView.getViewport();
double newX=this.imageView.getImage().getWidth()
+(mouseDragEndX-mouseDragStartX);
double newY=this.imageView.getImage().getHeight()
+(mouseDragStartY-mouseDragStartY);
this.imageView.setViewport(新矩形2D(newX,newY,viewport.getWidth(),viewport
.getHeight());
}
}
附:这段代码只是用来指示我正在尝试实现什么,并且不会正确编译

或许我的问题应该是:
如何捕捉鼠标拖动的长度或跨度?

试试这个,我想它会对你有所帮助

obj.setOnMousePressed(new EventHandler<MouseEvent>() {
  @Override public void handle(MouseEvent mouseEvent) {
    // record a delta distance for the drag and drop operation.
    dragDelta.x = stage.getX() - mouseEvent.getScreenX();
    dragDelta.y = stage.getY() - mouseEvent.getScreenY();
  }
});
obj.setOnMouseDragged(new EventHandler<MouseEvent>() {
  @Override public void handle(MouseEvent mouseEvent) {
      stage.setX(mouseEvent.getScreenX() + dragDelta.x);
    stage.setY(mouseEvent.getScreenY() + dragDelta.y);
  }
});
obj.setOnMousePressed(新的EventHandler(){
@重写公共无效句柄(MouseEvent MouseEvent){
//记录拖放操作的增量距离。
dragDelta.x=stage.getX()-mouseEvent.getScreenX();
dragDelta.y=stage.getY()-mouseEvent.getScreenY();
}
});
setOnMouseDrawed(新的EventHandler(){
@重写公共无效句柄(MouseEvent MouseEvent){
setX(mouseEvent.getScreenX()+dragDelta.x);
stage.setY(mouseEvent.getScreenY()+dragDelta.y);
}
});