2016-04-01 14 views
2

私の目標は、クリックしたところで円を作成し、中心から最も遠い円の位置に基づいて境界ボックスを作成するプログラムを作成することです。グループjavafxから長方形を削除する際の問題

これはうまくいきます。私は1つの問題しか持っていません。それは、グループ全体をクリアせずに古いバウンディングボックスを削除する方法を見つけられないようです。問題の

画像: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()を使用しました。境界ボックスを消去します。

関連する問題