画像を表示する1つのノード(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: このコードは、実装しようとしているものを示すためのものであり、正しくコンパイルされません。
または、私の質問は次のとおりだったはずです: マウスドラッグの長さまたは範囲をキャプチャする方法は?