我有一棵这样的树:
正如您所看到的,GridPane有10列。它们中的每一个都包含BorderPane包装到AnchorPane中。每个BorderPane由2个标签和1个radioButton组成。下面你可以看到它的样子:
我想问你如何从代码端访问这些元素。我知道我可以在GridPane上使用getChildren()方法,但后来我只从GridPane列中获得了AnchorPanes。我想深入了解,例如将文本设置为其中一个标签。
我想在Scene Builder中添加set id不是我想要的,因为会有很多列,我会在某个循环中填充它。
你能帮我解决这个问题吗?
还有一件事:我在Scene Builder中构建视图。
答案 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
直接注入引用,这在您的情况下效果不佳,因为您创建了循环中代码中的项,因此查找方法可能最适合您。