Я создал GridPane, содержащий панели. Каждая панель - это панель. Нажмите на каждую панель, чтобы добавить точку (круг) на панель. Проблема возникает при добавлении точки к нижней границе панели, которая изменяет размеры панели. Я не вижу какой-либо конкретной причины для этого, в то время как размер панели (панели) никак не влияет. Я ищу объяснения и возможные исправления. По демонстрационным причинам только верхняя панель может быть добавлена в точку.
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.RowConstraints;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
public class GridPaneApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
int columns = 1;
int rows = 2;
GridPane gridPane = new GridPane();
gridPane.setHgap(4);
gridPane.setVgap(4);
gridPane.setPadding(new Insets(4));
for (int i = 0; i < columns; i++) {
gridPane.getColumnConstraints().add(new ColumnConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.ALWAYS, HPos.CENTER, true));
}
for (int i = 0; i < rows; i++) {
gridPane.getRowConstraints().add(new RowConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.ALWAYS, VPos.CENTER, true));
}
for (int columnIndex = 0; columnIndex < columns; columnIndex++) {
for (int rowIndex = 0; rowIndex < rows; rowIndex++) {
Pane pane = new Pane();
pane.setStyle("-fx-background-color: purple, white; -fx-background-insets: 0, 1;");
gridPane.getChildren().add(pane);
GridPane.setConstraints(pane, columnIndex, rowIndex, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS);
if (rowIndex == 0) {
pane.setOnMousePressed(event -> {
double x = event.getX();
double y = event.getY();
System.out.println("x=" + x + ", y=" + y);
Circle circle = new Circle(8, Color.PURPLE);
circle.setLayoutX(x);
circle.setLayoutY(y);
pane.getChildren().add(circle);
});
}
}
}
Scene scene = new Scene(gridPane, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
}