繁体   English   中英

Java Fx 如何在 class 中引用添加的元素

[英]Java Fx how to refer to added elements within a class

我添加了

this.getChildren().add(new HBox(new TextField("Some_Text ")));

在 class 构造函数中,class 扩展了 Java Fx 组。 我想知道稍后如何更改该 TextField 中的文本。

例如,通常我们可以这样做

TextField asdf = new TextField();
asdf.setText("Some_text");

但是如何在前面的示例中稍后更改文本?

使用参考

正如 Slaw 在评论中所说:

在 class 的实例字段中存储对 TextField 的引用。

如果您使用 FXML

如果您使用 FXML,这在 JavaFX 应用程序中很常见,并在节点上放置fx:id属性,然后使用@FXML将节点注入您的 controller,引用将自动存储在 Z594C103F2C6E04EC013D8 中。 在某些情况下,这种类型的问题从“我如何获得对节点的引用?” 到“如何获得对 controller 的引用?”。 如果您需要回答最后一个问题,请查看以下建议: 传递参数 JavaFX FXML

使用查找

如果您真的无法将引用作为实例字段存储在 class 中,无论出于何种原因,请在节点上设置一个 css ID ,您可以稍后查找它,而无需编写可怕的代码来遍历场景图找到它.

例如,替换:

this.getChildren().add(new HBox(new TextField("Some_Text ")));

和:

TextField textField = new TextField("Some_Text ");
textField.setId("myId");
this.getChildren().add(new HBox(textField));

然后一段时间后,一旦节点在场景图中,您可以通过在场景中查找节点或通过以下方式查找父节点来找到该节点:

TextField myField = (TextField) scene.lookup("#myId");
if (myField != null) {
    // do something with myField
}

请注意查找中的演员表。 就其本质而言,基于 css ids 的运行时查找会丢失从存储引用中获得的编译时类型检查。 由于这个和其他原因,使用存储的引用通常是引用 JavaFX 中事物的首选方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM