这似乎是一个简单的问题,但我还没有找到相关的答案。
我正在创建一个简单的Javafx应用程序,并在点击时创建可以拖动的节点。
我想确保始终在AnchorPane上绘制特定类型的节点(圆圈)。
我认为这是所有相关的代码,但如果需要,我可以包括其余代码。
我该如何实现这种行为?
@Override
public void start(Stage stage) throws Exception {
root = new AnchorPane();
scene = new Scene(root, 800, 800);
scene.setFill(Color.WHITE);
scene.setOnMouseDragged(mouseHandler);
scene.setOnMouseReleased(mouseHandler);
scene.setOnMousePressed(mouseHandler);
stage.setScene(scene);
stage.setTitle("Shapes");
stage.show();
}
事件处理程序
EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
switch (eventName) {
case ("MOUSE_PRESSED"):
getCurrentShape(clickPoint);
if (!shapeSelected) {
if (clickType.equals("SECONDARY")) { // Draw a Square
ShapeComponent newShape = ShapeGenerator.generateRandomSquare(clickPoint);
components.add(newShape);
root.getChildren().add(newShape.getShape());
} else if (clickType.equals("PRIMARY")) { // Draw a Circle
ShapeComponent newShape = ShapeGenerator.generateCircle(clickPoint);
components.add(newShape);
/* MOVE NODE TO FRONT */
root.getChildren().add(newShape.getShape());
}
}
break;
答案 0 :(得分:2)
在这里回答我自己的问题。
我以不同的方式想到了这一点。在绘制圆圈时,我总是可以将圆圈移到前面,而不是在绘制时将圆形移动到背面。
这会将新形状(方形)添加到AnchorPane
,然后我们可以得到最近项目的索引(刚绘制的方形)并将其移到后面。
root.getChildren().add(newShape.getShape());
root.getChildren().get(root.getChildren().size() - 1).toBack(); // Move Square to back of AnchorPane
或者,如评论中所述。
root.getChildren().add(0, newShape.getShape());