有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java问题从组javafx中删除矩形

我的目标是创建一个程序,在我单击的位置创建圆,并基于距离中心最远的圆的位置创建边界框

它工作得很好,我只有一个问题,那就是我似乎不知道如何在不清除整个组的情况下删除旧的边界框

问题图片:enter image description here

这是我目前的代码(请原谅意大利面代码):

//The main class
public class createCircles extends Application
{
    circleCreator circle1 = new circleCreator(50,50);
    Group root = new Group(circle1);
    static double xMin = 300;
    static double xMax = 300;
    static double yMin = 300;
    static double yMax = 300;
    static int flip = 0;

    public void start(Stage primaryStage)
    {
        Scene scene = new Scene(root, 600, 600);
        createCircleAtMouseHandler(scene);

        primaryStage.setTitle("Assignment 5"); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage
    }

    void createCircleAtMouseHandler (Scene scene)
    {
        scene.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override public void handle(MouseEvent event) {
                if (!event.isControlDown())
                {
                    //Create the circle
                    double mouseX = event.getX();
                    double mouseY = event.getY();
                    System.out.println(mouseX + " " + mouseY);

                    circleCreator circle = new circleCreator(mouseX,mouseY);
                    root.getChildren().add(circle);

                    //Find bounding box values
                    if(yMin >= mouseY)
                    {
                        yMin = mouseY;
                    }
                    if(yMax <= mouseY)
                    {
                        yMax = mouseY;
                    }
                    if (xMax <= mouseX)
                    {
                        xMax = mouseX;
                    }
                    if(xMin >= mouseX)
                    {
                        xMin = mouseX;
                    }
                    System.out.println("ymin: " + yMin + "\nyMax: " + yMax + "\nxMax: " + xMax + "\nxMin: " + xMin);

                    int xTopLeft = (int)xMin;
                    int yTopLeft = (int)yMin;
                    int xBottomRight = (int)xMax;
                    int yBottomRight = (int)yMax;

                    //create/update the bounding box
                    BoundingBoxCreator boundingBox = new BoundingBoxCreator(xTopLeft, yTopLeft, xBottomRight, yBottomRight);
                    root.getChildren().remove(boundingBox); //Doesn't do anything
                    root.getChildren().add(boundingBox);
                }

            }
        });
    }
}
//Creates the bounding box
public class BoundingBoxCreator extends Pane
{
    public BoundingBoxCreator(int xTopLeft, int yTopLeft, int xBottomRight, int yBottomRight)
    {

        Rectangle r = new Rectangle(xTopLeft, yTopLeft, 50, 50);
        r.setFill(Color.TRANSPARENT);
        r.setWidth(xBottomRight-xTopLeft);
        r.setHeight(yBottomRight - yTopLeft);
        r.setStroke(Color.BLACK);
        r.setStrokeWidth(1);
        getChildren().add(r);
        System.out.println("Width: " + (xBottomRight - xTopLeft) + " Height: " + (yBottomRight - yTopLeft));



    }
}

    //Creates the circles
public class circleCreator extends Pane
{
    public circleCreator(double xPos, double yPos)
    {
        Circle circle = new Circle(xPos,yPos,15);
        circle.setFill(Color.SKYBLUE);
        getChildren().add(circle);
        circle.setStroke(Color.DARKBLUE);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    我想出来了。我创建了一个窗格,使其成为主根类的子类,并将边界框放在窗格中,而不是主根和已用窗格。清除();清除边界框