JavaFX:按行和列获取节点

时间:2013-12-29 14:06:59

标签: java javafx

如果我知道它的位置(行和列)或从gridPane获取节点的任何其他方式,有没有办法从gridPane获取特定节点?

2 个答案:

答案 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