【问题标题】:JavaFX increasing a circle's radius by clicking on itJavaFX通过单击来增加圆的半径
【发布时间】:2015-04-14 19:32:19
【问题描述】:

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

【问题讨论】:

    标签: java javafx geometry


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2013-11-22
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      相关资源
      最近更新 更多