Saltar al contenido

javafx GridPane recuperar contenido de celda específico

Luego de de nuestra larga búsqueda de datos hemos podido solucionar esta interrogante que suelen tener algunos los lectores. Te dejamos la solución y nuestro objetivo es serte de mucha ayuda.

Solución:

Bueno, supongo que si no hay una solución para obtener un nodo específico de gridpane por su índice de columna y fila, tengo una función para hacerlo,

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;

Suponiendo que tiene un girdPane de 8×8 donde i son las filas y j es la columna, puedes escribir:

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

El tipo de retorno es un objeto, por lo que tendrás que lanzarlo, en mi caso es:

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

Puede agregar una lista que contenga todos los elementos secundarios del panel de cuadrícula y el elemento principal de cada elemento secundario debe tener dos filas y columnas de números enteros, por lo tanto, solo tendrá que revisar esa lista y ver si tiene las coordenadas correctas. (Probablemente debería agregar una nueva clase para poder almacenar esas coordenadas), aquí hay un ejemplo mínimo de mi solución

import java.util.ArrayList;
import java.util.List;

import javafx.scene.Node;
import javafx.scene.layout.GridPane;

public class SpecialGridPane extends GridPane 
    List list = new ArrayList<>();

    public void addChild(int row, int column, Node node) 
        list.add(new NodeParent(row, column, node));
        setConstraints(node, column, row);
        getChildren().add(node);
    

    public Node getChild(int row, int column) 
        for (NodeParent node : list) 
            if (node.getRow() == row && node.getColumn() == column)
                return node.getNode();
        
        return null;
    


class NodeParent 
    private int row;
    private int column;
    private Node node;

    public NodeParent(int row, int column, Node node) 
        this.row = row;
        this.column = column;
        this.node = node;
    

    public int getRow() 
        return row;
    

    public int getColumn() 
        return column;
    

    public Node getNode() 
        return node;
    

Te mostramos comentarios y valoraciones

Agradecemos que quieras añadir valor a nuestro contenido informacional cooperando tu veteranía en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *