我没有看到任何直接的API来逐行获取索引,但是您可以使用getKids
API从Pane
,以及getRowIndex(Node child)
和getColumnIndex(Node child)
从GridPane
//Gets the list of children of this Parent.
public ObservableList<Node> getChildren()
//Returns the child's column index constraint if set
public static java.lang.Integer getColumnIndex(Node child)
//Returns the child's row index constraint if set.
public static java.lang.Integer getRowIndex(Node child)
这是使用GridPane
中的行和列索引获取Node
的示例代码
public Node getNodeByRowColumnIndex (final int row, final int column, GridPane gridPane) {
Node result = null;
ObservableList<Node> childrens = gridPane.getChildren();
for (Node node : childrens) {
if(gridPane.getRowIndex(node) == row && gridPane.getColumnIndex(node) == column) {
result = node;
break;
}
}
return result;
}
重要更新:getRowIndex()
和getColumnIndex()
现在是静态方法,应该更改为GridPane. getRowIndex(node)
和GridPane.getColumnIndex(node)
。
上面的答案是完全正确的,但是对于一些这样做的人来说,可能会有性能问题,尤其是对于包含许多元素的GridPanes。还有在使用循环(迭代GridPane的所有元素)时。
我建议您初始化网格窗格中包含的所有元素/节点的静态数组。然后使用此数组获取您需要的节点。
即
1.有一个二维数组:
private Node[][] gridPaneArray = null;
2.在视图初始化过程中像这样调用一个方法:
private void initializeGridPaneArray()
{
this.gridPaneArray = new Node[/*nbLines*/][/*nbColumns*/];
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