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



我有一个节点(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()));
    }
}

PS:这段代码只是为了指示我正在尝试实现的内容,并且无法正确编译。

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

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

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);
  }
});

相关内容

最新更新