【发布时间】:2015-08-03 13:08:48
【问题描述】:
我想在 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);
}
});
我的问题是 - 如何从内部句柄方法访问“circle1”?
在 JavaScript 中,我们使用e.currentTarget。
我无法将“circle1”声明为最终版本,因为之后我需要对其进行更改。
【问题讨论】:
-
你在
handle方法和EventHandler范围之外定义你的Circle实例。 -
@BranislavLazic 如果您指的是第二个句柄方法,我的 Circle 实例是在句柄方法之外定义的,我不能在第一个句柄方法之外声明,因为必须在单击按钮后创建圆圈。
-
不能直接声明为
final吗? IE。final Circle circle1 = new Circle();? -
"我不能宣布 "circle1" final 因为我需要更改它。" final 并不意味着不可变。它只是意味着你不能重新分配它。
-
好的,非常感谢。
标签: java javafx eventhandler