处理javafx中不重叠的MouseeEvent和圆圈

处理javafx中不重叠的MouseeEvent和圆圈,java,javafx,methods,logic,mouseevent,Java,Javafx,Methods,Logic,Mouseevent,基本上,我的程序是这样的: 这就是我想要的样子: (我认为)导致问题的方法是: private void handleDrawing(MouseEvent event) { if(clickedOrNot == true) { double x = event.getX(); double y = event.getY(); Circle circle = new Circle(x, y, 5); circle.se

基本上,我的程序是这样的:

这就是我想要的样子:

(我认为)导致问题的方法是:

    private void handleDrawing(MouseEvent event) {
    if(clickedOrNot == true) {
        double x = event.getX();
        double y = event.getY();
        Circle circle = new Circle(x, y, 5);
        circle.setFill(currentColor);
        circle.setStroke(currentColor);
        drawBox.getChildren().add(circle);
    }
}
我不知道为什么。新的圆圈没有与旧的圆圈重叠,它只是使越来越多的圆圈向右移动,最终离开屏幕

import javafx.application.*;
import javafx.event.*;
import javafx.geometry.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.scene.shape.Circle;
import javafx.scene.text.*;
import javafx.stage.*;

public class Drawing extends Application{
private String penStatus = "Status: OFF";
private BorderPane mainPane;
private HBox statusBox;
private Text statusText;
private HBox drawBox;
private HBox settingsBox;
private RadioButton yellowButton;
private RadioButton blueButton;
private RadioButton redButton;
private RadioButton eraserButton;
private Button clearButton;
private Color currentColor;
private boolean clickedOrNot;

public void start(Stage primaryStage) {

    currentColor = Color.YELLOW;
    clickedOrNot = false;
    mainPane = new BorderPane();
    mainPane.setStyle("-fx-background-color: white");
    mainPane.setPadding(new Insets(50, 50, 50, 50));
    statusText = new Text(penStatus);
    statusBox = new HBox(statusText);
    statusBox.setAlignment(Pos.CENTER);
    mainPane.setTop(statusBox);
    drawBox = new HBox();
    drawBox.setStyle("-fx-background-color: white");
    drawBox.setStyle("-fx-border-color: black");
    mainPane.setCenter(drawBox);
    drawBox.setOnMouseClicked(this::handleClicks);
    drawBox.setOnMouseMoved(this::handleDrawing);


    ToggleGroup colors = new ToggleGroup();
    (yellowButton = new RadioButton("Yellow")).setSelected(true);
    yellowButton.setOnAction(this::handleColor);
    yellowButton.setToggleGroup(colors);
    blueButton = new RadioButton("Blue");
    blueButton.setOnAction(this::handleColor);
    blueButton.setToggleGroup(colors);
    redButton = new RadioButton("Red");
    redButton.setOnAction(this::handleColor);
    redButton.setToggleGroup(colors);
    eraserButton = new RadioButton("Eraser");
    eraserButton.setOnAction(this::handleColor);
    eraserButton.setToggleGroup(colors);

    clearButton = new Button("Clear");
    clearButton.setOnAction(this::handleClear);
    settingsBox = new HBox(yellowButton, blueButton, redButton, eraserButton, clearButton);
    settingsBox.setAlignment(Pos.CENTER);
    settingsBox.setSpacing(10);
    mainPane.setBottom(settingsBox);

    Scene scene = new Scene(mainPane, 1000, 1000);
    primaryStage.setTitle("Draw Something");
    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.show();
}

public static void main(String args[]) {
    launch(args);
}
private void handleColor(ActionEvent event) {
    if(event.getSource() != clearButton) {
        if(event.getSource() == yellowButton) {
        currentColor = Color.YELLOW;
        }

        if(event.getSource() == blueButton) {
        currentColor = Color.BLUE;
        }

        if(event.getSource() == redButton) {
        currentColor = Color.RED;
        }

        if(event.getSource() == eraserButton) {
        currentColor = Color.WHITE;
        }
    }
    else {

    }
}

private void handleDrawing(MouseEvent event) {
    if(clickedOrNot == true) {
        double x = event.getX();
        double y = event.getY();
        Circle circle = new Circle(x, y, 5);
        circle.setFill(currentColor);
        circle.setStroke(currentColor);
        drawBox.getChildren().add(circle);
    }
}

private void handleClicks(MouseEvent event) {
    if(clickedOrNot == false) {
        clickedOrNot = true;
        penStatus = "Status: ON";
        statusText.setText(penStatus);
    }
    else if(clickedOrNot == true) {
        clickedOrNot = false;
        penStatus = "Status: OFF";
        statusText.setText(penStatus);
    }

}
}

好的,我发现了问题。我用的是Hbox,而不是窗格。如果没有对未来读者有用的话,请考虑删除这个问题。