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