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

标签 javafx scenebuilder

我有一棵这样的树:

enter image description here

如您所见,GridPane 有 10 列。它们每个都包含包裹在 AnchorPane 中的 BorderPane。每个 BorderPane 由 2 个标签和 1 个单选按钮组成。您可以在下面看到它的样子:

enter image description here

我想问你如何从代码端访问这些元素。我知道我可以在 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/

相关文章:

JavaFX - 如何检查鼠标是否已进入和/或退出 Pane ?

javafx - Scenebuilder 2.0 中的自定义组件

JavaFX ScrollPane如何设置透明背景

JavaFX SceneBuilder 2.0 不会为 fx :root as main layout tag 的自定义组件打开 FXML

java - FXML 加载异常未指定资源

java - HTML 文本区域无法将 "enter"键识别为 WebView 中的换行符

java - 我可以有一个接受子类型的列表属性吗?

image - JavaFX中的有效图像裁剪

JavaFX GUI - 为什么删除按钮功能不适用于 TableView?

java - fxml LoadException 仅在使用 MouseEvent 时出现! (Java + 场景生成器)