Search code examples
javajavafxdynamicfxmlgridpanel

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

  • solved this issue..instead of creating the grid pan in scene builder ..just create the grid using code and set constrains through code...try to create constrains early as possible in your execution order of the code..

    didn't work out for me using scene builder created grid pane