我想用JavaFX编写一个程序,其中包含一个按钮,单击该按钮时,会创建一个圆圈并将其添加到形状的ArrayList中。
createCircleBtn.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Circle circle1 = new Circle();
shapes.add(circle1);
circle1.setCenterX(event.getX());
circle1.setCenterY(event.getY());
circle1.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// doesn't work because "circle1" must be declared final (constant)
circle1.setCenterX(event.getX());
// "this" doesn't refer to "circle1"
this.setCenterY(event.getY());
}
});
mainPane.getChildren().add(circle1);
}
});
我的问题是-如何从句柄方法内部访问“circle 1”?在JavaScript中我们使用e.currentTarget
。
我不能声明“circle 1”为final,因为我需要在以后更改它。
2条答案
按热度按时间kjthegm61#
在代码中,没有任何地方需要重新赋值
circle1
,因此只需将其声明为final
即可:注意,在Java8中,您的代码将按原样编译,因为
circle1
是 * 有效的final*(意味着它只被赋值一次,永远不会被重新赋值)。q3aa05252#
使用event.getSource(),这样就可以为多个循环编写一个通用的事件处理程序,而不用担心点击了哪个循环: