web-dev-qa-db-ja.com

javafxGridPaneは特定のセルコンテンツを取得します

グリッドペインの特定のセルのコンテンツを取得したい。セルにボタンを配置しました

_setConstraints(btt , 0 ,1 ) 

setConstraints(btt , 0 ,2 )

getChildren().add....
_

私の場合、GridPane.getChildren.get(10)は良くありません。 cell(4,2)に直接移動して、その内容を取得したいと思います。

14
Elias Elias

グリッドペインから特定のノードを列と行のインデックスで取得するソリューションがない場合は、それを実行する関数があります。

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;
}
23
Shreyas Dave

iが行で、jが列である8x8のgirdPaneがあるとすると、次のように書くことができます。

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

戻り値の型はオブジェクトなので、キャストする必要があります。私の場合は次のようになります。

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

7
Ahmad Tn

グリッドペインのすべての子を含むリストを追加できます。各子の親には2つの整数の行と列が必要です。そのため、そのリストを調べて、正しい座標があるかどうかを確認する必要があります。 (これらの座標を保存できるように、適切に新しいクラスを追加する必要があります)、これが私のソリューションの最小限の例です

import Java.util.ArrayList;
import Java.util.List;

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

public class SpecialGridPane extends GridPane {
    List<NodeParent> 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;
    }
}
2
dani bilel