我正在尝试创建一个JavaFX程序,当您单击屏幕时会创建一个圆圈。一次可以有很多圈子。但是当我再次点击它时,我无法想出如何增加圆的半径的解决方案。
public class Controller implements Initializable {
@FXML
private Button reset;
@FXML
private AnchorPane anchor;
@FXML
private BorderPane border;
Circle circle = new Circle();
int radius = 20;
public void initialize (URL location, ResourceBundle resources) {
anchor.setOnMouseClicked(event -> {
border.getChildren().add(circle = new Circle());
circle.setCenterX(event.getX());
circle.setCenterY(event.getY());
circle.setRadius(radius);
});
reset.setOnAction(event -> {
border.getChildren().clear();
});
circle.setOnMouseClicked(event -> {
circle.setRadius(radius * 1.5);
});
}
}
答案 0 :(得分:2)
您声明为circle
的字段永远不会添加到场景图中。所以它永远不会出现,它的mouseClicked
处理程序永远不会被调用。
另一方面,您添加到场景图中的圆圈没有与它们关联的鼠标单击处理程序。您需要在创建处理程序时注册处理程序:
anchor.setOnMouseClicked(event -> {
Circle circle = new Circle();
border.getChildren().add(circle);
circle.setCenterX(event.getX());
circle.setCenterY(event.getY());
circle.setRadius(radius);
circle.setOnMouseClicked(e -> {
circle.setRadius(circle.getRadius() * 1.5);
// prevent event from propagating to pane:
e.consume();
});
});
现在只需删除circle
实例字段以及与之关联的处理程序。