私は、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;
}