Events 使用局部变量的JavaFX事件
我有一个方法可以创建一个名为createImageView()的ImageView,它使用EventHanders调用各种事件。我希望能够在这个方法中使用局部变量。我通常做的是在handle(Event)方法中指定要使用的最终变量 在下面描述的方法中,当我使用final时,会出现以下错误: 无法分配最终局部变量initY,因为它是在封闭类型中定义的Events 使用局部变量的JavaFX事件,events,variables,javafx,local,final,Events,Variables,Javafx,Local,Final,我有一个方法可以创建一个名为createImageView()的ImageView,它使用EventHanders调用各种事件。我希望能够在这个方法中使用局部变量。我通常做的是在handle(Event)方法中指定要使用的最终变量 在下面描述的方法中,当我使用final时,会出现以下错误: 无法分配最终局部变量initY,因为它是在封闭类型中定义的 无法分配最终局部变量initY,因为它是在封闭类型中定义的 无法指定最终局部变量dragAnchor,因为它是在封闭类型中定义的 当然,删除fina
无法分配最终局部变量initY,因为它是在封闭类型中定义的
无法指定最终局部变量dragAnchor,因为它是在封闭类型中定义的 当然,删除final给了我以下信息: 无法在其他方法中定义的内部类中引用非最终变量initX 那么,我该怎么做才能让这个方法起作用呢
private ImageView createImageView(){
双initX;
双重人格;
点2D dragAnchor;
imgView.setOnMousePressed(新事件处理程序(){
公共无效句柄(MouseEvent me){
//按下鼠标时,存储初始位置
initX=imgView.getTranslateX();
initY=imgView.getTranslateY();
dragAnchor=newpoint2d(me.getSceneX(),me.getSceneY());
我。消费();
}
});
imgView.setOnMouseDrawed(新事件处理程序(){
公共无效句柄(MouseEvent me){
double dragX=me.getSceneX()-dragAnchor.getX();
double dragY=me.getSceneY()-dragAnchor.getY();
双newXPosition=initX+dragX;
双新位置=initY+dragY;
imgView.setTranslateX(newXPosition);
imgView.setTranslateY(newYPosition);
我。消费();
}
});
imgView.setOnMouseCentered(新事件处理程序(){
公共无效句柄(MouseeEvent事件){
imgView.setEffect(新辉光(0.5));
event.consume();
}
});
imgView.setOnMouseExited(新事件处理程序(){
公共无效句柄(MouseeEvent事件){
imgView.setEffect(新辉光(0.0));
event.consume();
}
});
返回imgView;
}
我删除了3个局部变量,并将它们设置为类变量,这样就可以工作了。如果有人不介意提供一个快速的解释,我会很感激的。使用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()
)
);
final DoubleProperty initX=new SimpleDoubleProperty();
final ObjectProperty dragAnchor=新的SimpleObjectProperty();
...
//事件内处理程序
initX.set(
imageView.getTranslateX()
);
德拉甘索(
新点2D(
me.getSceneX(),
我
)
);
谢谢你。这对双打很有效,但德拉甘索仍然给我同样的问题。没什么大不了的,我下面的解决方案现在似乎还有效。更新的示例演示了如何将ObjectProperty
用于dragAnchor
。