考虑this example如何从主代码中获取或设置表单上的任何内容?
我们所拥有的只是一个简单的主要功能,如
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));
Scene scene = new Scene(root, 300, 275);
stage.setTitle("FXML Welcome");
stage.setScene(scene);
stage.show();
}
FXML中定义的表单。
从未明确实例化的控制器类。
由于我没有指向主代码中控制器类实例的链接,如何从控制器外部访问表单上的任何内容?
答案 0 :(得分:1)
您可以做的一件事是为控制器创建一个默认构造函数,并将它this
存储到一个私有静态变量中。然后,您可以为该变量创建静态getter以检索控制器实例。然后,您可以直接公开@FXML
- 带注释的字段,也可以使用getter方法。如果您加载同一个控制器的多个实例,这会打破这个原因。
我对JavaFX没有多少经验,所以我无法确定这是一个好/坏的解决方案......我只知道它适用于更简单的情况。
编辑:此答案有更好的解决方案:Accessing FXML controller class
基本上:
FXMLLoader fxmlLoader = new FXMLLoader();
Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
FooController fooController = (FooController) fxmlLoader.getController();