2013-10-02 4 views
3

У меня есть один узел (ImageView), который отображает изображение и другой узел (прямоугольник), который находится поверх него. Поведение, в котором я нуждаюсь, состоит в том, что когда мышь перетаскивается (жестом сжимания-перетаскивания) по прямоугольнику, оба узла должны двигаться когерентно. Мой мыслительный процесс идет в следующем направлении:JavaFX2: координаты начала и конца события перемещения

• Переместите оба узла на одинаковое расстояние в направлении перетаскивания.

Для этого варианта (возможно, есть больше вариантов) Мне нужно расстояние между началом и концом перетаскивания мышью. Я попытался захватить начальную и конечную координаты перетаскивания, но не увенчался успехом. Я думаю, что теряюсь в том, какие обработчики выполняют.

код у меня есть ниже:

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

    } 
} 

P.S: Этот код только для обозначения того, что я пытаюсь реализовать и не будет правильно компилировать.

Или, может быть, мой вопрос должен был быть: Как захватить длину или промежуток перетаскивания мышью?

ответ

2

попробовать это я думаю, что это поможет вам

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); 
    } 
}); 
Смежные вопросы