我想检索Gridpane中一个特定单元格的内容。我用
将按钮放在单元格中setConstraints(btt , 0 ,1 )
setConstraints(btt , 0 ,2 )
getChildren().add....
就我而言,GridPane.getChildren.get(10)
并不好。我想直接进入单元格(4,2)并获取其内容。
答案 0 :(得分:21)
嗯,我想如果没有解决方案从gridpane获取特定节点的是列和行索引,我有一个函数来做到这一点,
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;
}
答案 1 :(得分:5)
假设您有一个8x8 girdPane,其中i
是行,j
是列,您可以写:
myGridPane.getChildren().get(i*8+j)
返回类型是一个对象,所以你必须把它投出来,就我而言:
(StackPane) (myGridPane.getChildren().get(i*8+j))
答案 2 :(得分:1)
您可以添加一个列表,其中包含网格窗格的每个子项,每个子项的父项必须具有两个整数行和列,因此,您只需要遍历该列表,看看它是否具有正确的坐标! (您应该适当地添加一个新类,以便可以存储这些坐标),这是我的解决方案的一个最小示例
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;
}
}
答案 3 :(得分:1)
在这个问题上,我对提出的解决方案有些麻烦,因为方法[2, 4, 6, 8, 10, 12]
可能在第一行或列(当索引实际上为0时)返回GridPane.getColumnIndex(Node node)
。因此,我研究了wrapperclass null
,并得出了以下解决方案。
也许它将帮助其他有相同问题的人。
Integer
答案 4 :(得分:1)
如重复中所述,您可能会遇到所选答案的性能问题 (getNodeFromGridPane)
这是克服这个问题的方法:https://stackoverflow.com/a/65386693/11284920 但是,总结一下:
1.有一个二维数组:
private Node[][] gridPaneArray = null;
2.在视图初始化期间调用这样的方法:
private void initializeGridPaneArray()
{
this.gridPaneArray = new Node[this.gridModel.getLines() [this.gridModel.getColumns()];
for(Node node : this.mainPane.getChildren())
{
this.gridPaneArray[GridPane.getRowIndex(node)][GridPane.getColumnIndex(node)] = node;
}
}
3.获取您的节点
Node n = this.gridPaneArray[x][y]; // and cast it to any type you want/need