Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javafx GridPane retrieve specific Cell content

I want to retrieve the content of one specific cell in a Gridpane. I have put buttons in the cells with the

setConstraints(btt , 0 ,1 ) 

setConstraints(btt , 0 ,2 )

getChildren().add....

In my case the GridPane.getChildren.get(10) is not good. I want to go directly to the cell(4,2) and get its content.

like image 330
Elias Elias Avatar asked Dec 18 '13 10:12

Elias Elias


People also ask

How does GridPane work in JavaFX?

GridPane lays out its children within a flexible grid of rows and columns. If a border and/or padding is set, then its content will be layed out within those insets. A child may be placed anywhere within the grid and may span multiple rows/columns.

How do you get the column and row index of a node in a GridPane?

You can get the row index and column index by utilising the static methods getRowIndex() and getColumnIndex() which are located in the GridPane class. System. out. println("Row: " + GridPane.

How do I make my GridPane resizable in JavaFX?

I've found the easiest way to do this is to create an HBox and add the GridPane and the VBox to it. Set the "fillHeight" property to true on the HBox. The "fillWidth" properties on the GridPane and VBox should be set to true, and their HGrow properties set to "always," (or "sometimes").

How do I reset my GridPane?

A way to clear the GridPane and maintain the Gridlines is as follow : Node node = grid. getChildren(). get(0); grid.


2 Answers

Well I guess if there is no solution to get a specific node from gridpane by is column and row index, I have a function to do that,

private Node getNodeFromGridPane(GridPane gridPane, int col, int row) {
    for (Node node : gridPane.getChildren()) {
        if (GridPane.getColumnIndex(node) == col && GridPane.getRowIndex(node) == row) {
            return node;
        }
    }
    return null;
}
like image 62
Shreyas Dave Avatar answered Sep 28 '22 13:09

Shreyas Dave


Assuming you have an 8x8 girdPane where i is the rows and j is the column, you can write:

myGridPane.getChildren().get(i*8+j)

The return type is an object, so you will have to cast it, in my case it's:

(StackPane) (myGridPane.getChildren().get(i*8+j))

like image 42
Ahmad Tn Avatar answered Sep 28 '22 13:09

Ahmad Tn