我有一个创建 ImageView 的方法,称为 createImageView(),它使用 EventHanlders 来调用各种事件。我希望能够在这种方法中使用局部变量。我通常做的是分配最终变量以在 handle(Event) 方法中使用。
在下面描述的方法中,当我使用 final 时,会出现以下错误:
最终局部变量 initY 无法赋值,因为它定义在封闭类型
中 最终局部变量 initY 无法赋值,因为它定义在封闭类型
中 最终局部变量 dragAnchor 无法赋值,因为它定义在封闭类型中类型
当然,删除 final 会给我这个信息:
不能在不同方法中定义的内部类中引用非最终变量 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;
}