gpt4 book ai didi

JavaFX 通过单击来增加圆的半径

转载 作者:行者123 更新时间:2023-12-02 04:46:15 32 4
gpt4 key购买 nike

我正在尝试创建一个 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 实例字段以及与其关联的处理程序即可。

关于JavaFX 通过单击来增加圆的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635888/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com