我最近一直在玩JavaFX并且我只想出了如何使用MouseEvent
,我想创建一个程序,当你点击它时,它会抓住你的X
和{ {1}}并在该地方创建一个圆圈。
我在尝试此操作时收到错误Y
。我打算使用lambda,但我无法弄明白。
local variables referenced from an inner class
答案 0 :(得分:1)
即使您的代码已编译,也无法更新圆圈的位置。您只需在centerX
和centerY
时设置圈子的x=0
和y=0
一次。如果您被允许访问内部类中的(非最终的,非有效最终的)局部变量,那么您要做的就是更新x
和y
,而不是圆圈&#39 ; s centerX
和centerY
属性。
你只需要
public void start(Stage stage){
v = new VBox(10);
scene = new Scene(v, 300, 300);
Circle circle = new Circle();
v.getChildren().add(circle);
scene.setOnMousePressed(new EventHandler<MouseEvent>(){
public void handle(MouseEvent e)
{
circle.setCenterX(e.getX());
circle.setCenterY(e.getY());
}
});
stage.setScene(scene);
stage.show();
}
lambda表达式版本看起来像
public void start(Stage stage){
v = new VBox(10);
scene = new Scene(v, 300, 300);
Circle circle = new Circle();
v.getChildren().add(circle);
scene.setOnMousePressed(e -> {
circle.setCenterX(e.getX());
circle.setCenterY(e.getY());
});
stage.setScene(scene);
stage.show();
}
在Java8之前的Java版本中,您需要将circle
声明为final,您可以随时执行:
final Circle circle = new Circle();
答案 1 :(得分:0)
错误消息告诉您问题所在:您的本地变量x
和y
正在内部类中引用 - 您的EventHandler
。您需要将x
和y
声明为Circle
类的成员(应按约定大写,btw),而不是start
函数中的局部变量。然后,您就可以在EventHandler
。