我有一棵这样的树:
如您所见,GridPane 有 10 列。它们每个都包含包裹在 AnchorPane 中的 BorderPane。每个 BorderPane 由 2 个标签和 1 个单选按钮组成。您可以在下面看到它的样子:
我想问你如何从代码端访问这些元素。我知道我可以在 GridPane 上使用 getChildren() 方法,但随后我只能从 GridPane 列中获取 AnchorPanes。我想深入研究,例如将文本设置到其中一个标签中。
我想在场景生成器中添加设置 id 不是我想要的,因为会有很多列,我将在某个循环中填充它。
你能帮我解决这个问题吗?
还有一件事:我在场景生成器中构建 View 。
最佳答案
你可以set a css id对于创建时循环内的节点。您可以稍后lookup按您设置的 id 的节点。一个lookup will also work on a scene查找场景中的任何节点或匹配的节点集。
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 的查找或 tree traversal可能是首选,或者通过 fx:id
和 @FXML
直接注入(inject)引用,这在您的情况下效果不佳,因为您在循环中的代码,因此查找方法可能最适合您。
关于javafx - 如何获取javafx中子节点的访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101033/