2

My goal is to create a program that creates circles at where I click, and create a bounding box based on the locations of the furthest circles from the center.

It works just fine, I only have one issue, and that's that I can't seem to figure out how to remove the old bounding box without clearing the entire group.

Picture of the problem: enter image description here

Here's my code currently (Excuse the spaghetti code):

//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);
    }
}
Chris Stillwell
  • 10,266
  • 10
  • 67
  • 77

1 Answers1

0

I figured it out. I created a pane and made it a child of the main root class and put the bounding box inside of the pane instead of the main root and used pane.clear(); to wipe out the bounding boxes.