0

私は、EventHanlders を使用してさまざまなイベントを呼び出す createImageView() という ImageView を作成するメソッドを持っています。このメソッドでローカル変数を使用できるようにしたいと考えています。私が通常行うことは、handle(Event) メソッド内で使用する最終変数を割り当てることです。

以下に説明する方法では、最終的に使用すると、次のエラーが発生します。

最終ローカル変数 initY は、囲んでいる型で定義されているため、割り当てることができません
最終ローカル変数 initY は、囲んでいる型で定義されているため、割り当てることができません 最終ローカル変数 dragAnchor は、囲んでいる型で定義されている
ため、割り当てられませんタイプ

もちろん、ファイナルを削除すると、次のメッセージが表示されます。

別のメソッドで定義された内部クラス内の非最終変数 initX を参照できません

では、この方法を機能させるにはどうすればよいでしょうか?

private ImageView createImageView() {
    double initX;
    double initY;
    Point2D dragAnchor;

    imgView.setOnMousePressed(new EventHandler < MouseEvent > () {
        public void handle(MouseEvent me) {
            //when mouse is pressed, store initial position
            initX = imgView.getTranslateX();
            initY = imgView.getTranslateY();
            dragAnchor = new Point2D(me.getSceneX(), me.getSceneY());
            me.consume();
        }
    });

    imgView.setOnMouseDragged(new EventHandler < MouseEvent > () {
        public void handle(MouseEvent me) {
            double dragX = me.getSceneX() - dragAnchor.getX();
            double dragY = me.getSceneY() - dragAnchor.getY();

            double newXPosition = initX + dragX;
            double newYPosition = initY + dragY;
            imgView.setTranslateX(newXPosition);
            imgView.setTranslateY(newYPosition);
            me.consume();
        }
    });

    imgView.setOnMouseEntered(new EventHandler < MouseEvent > () {
        public void handle(MouseEvent event) {
            imgView.setEffect(new Glow(0.5));
            event.consume();
        }
    });

    imgView.setOnMouseExited(new EventHandler < MouseEvent > () {
        public void handle(MouseEvent event) {
            imgView.setEffect(new Glow(0.0));
            event.consume();
        }
    });
    return imgView;
}
4

2 に答える 2