JavaFX 在正确位置绘制多边形的问题

问题描述 投票:0回答:1
我遇到以下问题:绘制图形(在本例中为三角形)工作正常。但是,三角形应该在我单击的位置绘制,并且它从工具栏的左上角开始绘制,这种情况不应该发生。

我还附加了一个指向我的 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(); } }
提前感谢您的帮助

java javafx mouseevent
1个回答
0
投票

HBox

 是一个托管布局容器。如果要执行自由格式绘图,则不应使用托管布局容器。相反,您应该使用不代表您执行布局的 
Group
Pane
(因为您不希望发生这种情况)。

如果您有按钮等控件的托管布局,它们应该位于与自由格式绘图容器不同的容器中。

供参考的简单绘图应用程序(使用画布,但您可以使用场景图代替,只需确保您没有绘制到为您管理布局的窗格样式中)。

© www.soinside.com 2019 - 2024. All rights reserved.