4

画像を表示する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: このコードは、実装しようとしているものを示すためのものであり、正しくコンパイルされません。

または、私の質問は次のとおりだったはずです: マウスドラッグの長さまたは範囲をキャプチャする方法は?

4

1 に答える 1