グリッドペインの特定のセルのコンテンツを取得したい。セルにボタンを配置しました
_setConstraints(btt , 0 ,1 )
setConstraints(btt , 0 ,2 )
getChildren().add....
_
私の場合、GridPane.getChildren.get(10)
は良くありません。 cell(4,2)に直接移動して、その内容を取得したいと思います。
グリッドペインから特定のノードを列と行のインデックスで取得するソリューションがない場合は、それを実行する関数があります。
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;
}
i
が行で、j
が列である8x8のgirdPaneがあるとすると、次のように書くことができます。
myGridPane.getChildren().get(i*8+j)
戻り値の型はオブジェクトなので、キャストする必要があります。私の場合は次のようになります。
(StackPane) (myGridPane.getChildren().get(i*8+j))
グリッドペインのすべての子を含むリストを追加できます。各子の親には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;
}
}