2016-04-01 3 views
2

Моя цель - создать программу, которая создает круги, на которых я нажимаю, и создать ограничительную рамку на основе местоположений самых дальних кругов из центра.Проблемы с удалением прямоугольника из группы 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); 
    } 
} 

ответ

0

Я понял это. Я создал панель и сделал ее дочерним элементом основного корневого класса и поместил ограничительную рамку внутри панели вместо основного корня и использовал pane.clear(); для уничтожения ограничивающих коробок.

Смежные вопросы