我还附加了一个指向我的 Google 云端硬盘的链接,其中包含一段记录,显示点击 3 次后三角形被绘制在错误的位置。 :
public class Controller {
@FXML
private Button triangleButton;
@FXML
private Button rectangleButton;
@FXML
private Button circleButton;
@FXML
private HBox hBox;
private int triangleCounter = 0, rectangleCounter = 0, circleCounter = 0;
private ArrayList<Double> xPoints = new ArrayList<>();
private ArrayList<Double> yPoints = new ArrayList<>();
@FXML
public void onButtonClicked(ActionEvent e) {
ArrayList<Button> buttons = new ArrayList<Button>();
buttons.add(triangleButton);
buttons.add(rectangleButton);
buttons.add(circleButton);
for (Button btn:buttons)
btn.setDisable(true);
if (e.getSource().equals(triangleButton)) {
hBox.setOnMouseClicked(event -> {
double x = event.getX();
double y = event.getY();
xPoints.add(x);
yPoints.add(y);
triangleCounter += 1;
if (triangleCounter >= 3) {
for (Button btn : buttons)
btn.setDisable(false);
triangleCounter = 0;
MyTriangle triangle = new MyTriangle(xPoints.get(0),yPoints.get(0),
xPoints.get(1),yPoints.get(1), xPoints.get(2), yPoints.get(2));
triangle.drawTriangle();
hBox.getChildren().add(triangle);
hBox.setOnMouseClicked(null);
}
});
}
xPoints.clear();
yPoints.clear();
}
}
提前感谢您的帮助
HBox
是一个托管布局容器。如果要执行自由格式绘图,则不应使用托管布局容器。相反,您应该使用不代表您执行布局的
Group
或
Pane
(因为您不希望发生这种情况)。如果您有按钮等控件的托管布局,它们应该位于与自由格式绘图容器不同的容器中。
供参考的简单绘图应用程序(使用画布,但您可以使用场景图代替,只需确保您没有绘制到为您管理布局的窗格样式中)。