Just some guy
Just some guy

Reputation: 1959

JavaFX - Making GridPane take up all available space in BorderPane

I'm using the following code to create a simple grid of buttons for a calculator:

    BorderPane rootNode = new BorderPane();

    GridPane gridPane = new GridPane();
    rootNode.setCenter(gridPane);

    int counter = 1;
    for(int row = 3; row > 0; row--)
        for(int col = 0; col < 3; col++) {
            Button button = new Button("" + counter++);
            button.setOnAction(this);
            gridPane.add(button, col, row);
        }
    gridPane.add(new Button("R"), 0, 4);
    gridPane.add(new Button("0"), 1, 4);

(Wanted to post an image of how it looks here, but I don't have enough reputation points to be allowed to do so)

The GridPane ends up being tiny and crammed up in the upper left corner, but I want it to take up all available space in the BorderPane's center region (that would be the entire window in this case). I've tried messing around with a bunch of things like various setSize methods, but havn't had much luck.

Upvotes: 4

Views: 9058

Answers (2)

Tobi
Tobi

Reputation: 932

Sorry, I missunderstood the question.

The Buttons are just too small, so not taking all the space they have in the borderpane? The width of a button depends on the size of the text it has. You just write a number in it so they are pretty small then. Use button.setPrefWidth(Integer.MAX_VALUE) and they use all the width they can get!

Upvotes: 0

ItachiUchiha
ItachiUchiha

Reputation: 36792

Your GridPane is already taking all the space available to it i.e. the entire Borderpane. Its the GridCells which are not using the space available to the GridPane.

You can make use of the Hgrow and Vgrow options available in the GridPane to make the cells take up the entire space available.

Here is an example which uses setHgrow to use the entire width available to the GridPane. You may add the same for the Height.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        BorderPane rootNode = new BorderPane();
        rootNode.setMinSize(300, 300);
        rootNode.setStyle("-fx-background-color: RED;");
        GridPane gridPane = new GridPane();
        gridPane.setStyle("-fx-background-color: BLUE;");
        rootNode.setCenter(gridPane);

        int counter = 1;
        for (int row = 3; row > 0; row--)
            for (int col = 0; col < 3; col++) {
                Button button = new Button("" + counter++);
                gridPane.add(button, col, row);
                GridPane.setHgrow(button, Priority.ALWAYS);
            }
        Button r = new Button("R");
        gridPane.add(r, 0, 4);
        GridPane.setHgrow(r, Priority.ALWAYS);
        Button r0 = new Button("0");
        gridPane.add(r0, 1, 4);
        GridPane.setHgrow(r0, Priority.ALWAYS);
        Scene scene = new Scene(rootNode);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Upvotes: 2

Related Questions