【问题标题】:Javafx move specific node to front of AnchorPaneJavafx 将特定节点移动到 AnchorPane 的前面
【发布时间】:2018-05-06 04:18:13
【问题描述】:

这似乎是一个简单的问题,但我还没有找到相关的答案。

我正在创建一个简单的 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;

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    在这里回答我自己的问题。

    我以不同的方式想到了这一点。我可以在绘制正方形时始终将它们移到后面,而不是在绘制圆时总是将其移到前面。

    这会将新形状(正方形)添加到AnchorPane,然后我们可以获得最新项目(刚刚绘制的正方形)的索引并将其移到后面。

    root.getChildren().add(newShape.getShape());
    root.getChildren().get(root.getChildren().size() - 1).toBack(); // Move Square to back of AnchorPane
    

    或者,如 cmets 中所述。

    root.getChildren().add(0, newShape.getShape());
    

    【讨论】:

    • 这可以在单个语句中更有效地完成:root.getChildren().add(0, newShape.getShape());
    • @fabian 感谢您的建议,更新了我的答案。
    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2017-11-22
    • 2022-01-05
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多