[英]JavaFX Events Using Local Variables
我有一個創建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;
}
使用JavaFX屬性而不是原始類型。
例如:
final DoubleProperty initX = new SimpleDoubleProperty();
final ObjectProperty<Point2D> dragAnchor = new SimpleObjectProperty<>();
...
// in event handler
initX.set(
imageView.getTranslateX()
);
dragAnchor.set(
new Point2D(
me.getSceneX(),
me.getSceneY()
)
);
我刪除了3個局部變量,使它們成為類變量,然后它起作用了。 如果有人不介意提供一個簡短的解釋,為什么我會很感激。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.