我的目标是创建一个程序,在我点击的位置创建圆圈,并根据中心最远圆圈的位置创建一个边界框。
它工作得很好,我只有一个问题,那就是我似乎无法弄清楚如何在不清除整个组的情况下删除旧的边界框。
这是我目前的代码(请原谅意大利面条代码):
//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 :(得分:0)
我明白了。我创建了一个窗格并使其成为主根类的子窗口并将边界框放在窗格内而不是主根中并使用了pane.clear();消灭边界框。