我有一棵这样的树:
正如您所看到的,GridPane 有 10 列。它们每个都包含包裹在 AnchorPane 中的 BorderPane。每个 BorderPane 由 2 个标签和 1 个单选按钮组成。您可以在下面看到它的样子:
我想问您如何从代码端访问这些元素。我知道我可以在 GridPane 上使用 getChildren() 方法,但随后我只能从 GridPane 列中获取 AnchorPanes。我想深入研究,例如将文本设置到其中一个标签中。
我想添加场景生成器中的 set id 不是我想要的,因为会有很多列,我将在某个循环中填充它。
你能帮我解决这个问题吗?
另一件事:我在场景生成器中构建视图。
你你可以设置 CSS id https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#setId-java.lang.String-对于创建时循环内的节点。您可以稍后lookup https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#lookup-java.lang.String-按您设置的 id 的节点。 A查找也适用于场景 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html#lookup-java.lang.String-查找场景中的任何节点或匹配的节点集。
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 的查找或树遍历 https://en.wikipedia.org/wiki/Tree_traversal可能是首选,或者通过直接注入参考fx:id
and @FXML
,这在您的情况下效果不佳,因为您在循环中的代码中创建项目,因此查找方法可能最适合您。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)