GridPane непреднамеренное изменение размера строки - PullRequest
2 голосов
/ 08 марта 2020

Я создал 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...