如何在javafx中获取对子节点的访问权限?

时间:2016-06-29 13:27:51

标签: javafx scenebuilder

我有一棵这样的树:

enter image description here

正如您所看到的,GridPane有10列。它们中的每一个都包含BorderPane包装到AnchorPane中。每个BorderPane由2个标签和1个radioButton组成。下面你可以看到它的样子:

enter image description here

我想问你如何从代码端访问这些元素。我知道我可以在GridPane上使用getChildren()方法,但后来我只从GridPane列中获得了AnchorPanes。我想深入了解,例如将文本设置为其中一个标签。

我想在Scene Builder中添加set id不是我想要的,因为会有很多列,我会在某个循环中填充它。

你能帮我解决这个问题吗?

还有一件事:我在Scene Builder中构建视图。

1 个答案:

答案 0 :(得分:1)

您可以在创建时{/ 3}}获取循环中的节点。您可以通过您设置的ID稍后set a css id节点。一个lookup来查找场景中的任何节点或匹配的节点集。

HBox parent = new HBox();
for (int i = 0; i < N_COLS, i++) {
    Node childNode = createNode();
    childNode.setId("child" + i);
    parent.getChildren().add(childNode);
}
. . .
Node redheadedStepchild = parent.lookup("#child5");

当然,您也可以始终以标准对象访问方式访问子节点:

Node redheadedStepchild = parent.getChildren().get(5);

如果结构嵌套在您的问题中,那么您可以执行以下操作:

Node redheadedGrandchild = grandparent.getChildren().get(3).getChildren().get(5);

这样的搜索在大型结构上变得复杂,最好避免使用,因为你的代码会变得更脆弱。因此,基于CSS的查询或lookup will also work on a scene可能是首选,或通过fx:id@FXML直接注入引用,这在您的情况下效果不佳,因为您创建了循环中代码中的项,因此查找方法可能最适合您。