JavaFX通过单击增加圆的半径

JavaFX increasing a circle's radius by clicking on it

我正在尝试创建一个 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);
        });
    }
}

您声明为 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 实例字段以及与之关联的处理程序即可。