处理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,而不是窗格。如果没有对未来读者有用的话,请考虑删除这个问题。