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