'Javafx grid pane..cannot add rows dynamically..without getting shrink

I want to add ui nodes dynamically to a gridapanes row without shrinking ..and instead of shrinking gridpane should enable scrolling (grid pane is in a scroll pane)..but neither of them is happening...

All I am attempting is to create a event calender with ability to view events of whole month as days in the top row (so at least 30 columns).

Controller class

package sample;

import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;


import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {
    public GridPane gridPane;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        for (int i = 0; i <= 20; i++) {
            VBox box = new VBox();
            Label label = new Label(Integer.toString(i));
            label.setMinHeight(50);
            label.prefHeight(50);
            label.setMaxHeight(50);
            gridPane.setGridLinesVisible(true);
            label.setStyle("-fx-background-color:yellow;");
            box.getChildren().add(label);
            box.setAlignment(Pos.CENTER);
            gridPane.add(box, 0, i);
        }

        Label labe2 = new Label("HelloWorld");
        labe2.setMinHeight(80);
        gridPane.add(labe2, 0, 15);
    }
}

Really need help

enter image description here

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
            prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="sample.Controller">
    <children>
        <AnchorPane layoutX="39.0" layoutY="15.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0"
                    AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <ScrollPane fitToHeight="true" fitToWidth="true" pannable="true" prefHeight="239.0" prefWidth="331.0"
                            AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
                            AnchorPane.topAnchor="0.0">
                    <content>
                        <GridPane fx:id="gridPane" prefHeight="239.0" prefWidth="331.0">
                            <columnConstraints>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
                            </columnConstraints>
                            <rowConstraints>
                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
                            </rowConstraints>
                        </GridPane>
                    </content>
                </ScrollPane>
            </children>
        </AnchorPane>
    </children>
</AnchorPane>


Solution 1:[1]

Your GridPane rows all have a minHeight of 10.0. This means they will always shrink to that size before utilizing the ScrollPane.

Change the minHeight for each row to -Infinity, which basically makes it match your prefHeight:

<RowConstraints minHeight="-Infinity" prefHeight="30.0" vgrow="SOMETIMES" />

Alternatively, in order to set these contraints programatically in your controller, add a new RowConstraints after adding the VBox:

gridPane.getRowConstraints().add(new RowConstraints(30));

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1