如果我知道它的位置(行和列)或从gridPane获取节点的任何其他方式,有没有办法从gridPane获取特定节点?
答案 0 :(得分:33)
我没有看到任何直接API来逐行获取列列索引,但您可以使用getChildren
中的Pane
API,getRowIndex(Node child)
和getColumnIndex(Node child)
来自{ {1}}
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)
Node
的示例代码
GridPane
重要更新: 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)
。
答案 1 :(得分:1)
@invariant 的上述答案是完全正确的,但对于一些这样做的人来说,可能存在性能问题,尤其是包含许多元素的 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