JavaFX通过单击增加圆的半径

时间:2015-04-14 19:32:19

标签: java javafx geometry

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

1 个答案:

答案 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实例字段以及与之关联的处理程序。