如何在JavaFX中与FXML表单进行交互?

时间:2014-04-29 16:12:25

标签: java javafx-2

考虑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中定义的表单。

从未明确实例化的控制器类。

由于我没有指向主代码中控制器类实例的链接,如何从控制器外部访问表单上的任何内容?

1 个答案:

答案 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();