我想随时与 FXML Controller 类通信,从主应用程序或其他阶段更新屏幕上的信息。

这可能吗?我还没有找到任何方法来做到这一点。

静态函数可能是一种方法,但它们无权访问表单的控件。

有任何想法吗?

最佳答案

您可以从 FXMLLoader 获取 Controller

FXMLLoader fxmlLoader = new FXMLLoader();
Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
FooController fooController = (FooController) fxmlLoader.getController();

将它存储在您的主阶段并提供 getFooController() getter 方法。
从其他类或阶段,每次需要刷新加载的“foo.fxml”页面时,从其 Controller 中询问:
getFooController().updatePage(strData);

updatePage() 可以是这样的:
// ...
@FXML private Label lblData;
// ...
public void updatePage(String data){
    lblData.setText(data);
}
// ...

在 FooController 类中。
这样其他页面用户就不会关心页面的内部结构,比如 Label lblData 是什么以及在哪里。

也看看 https://stackoverflow.com/a/10718683/682495 。在 JavaFX 2.2 中 FXMLLoader 得到改进。

关于javafx-2 - 访问 FXML Controller 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10751271/

10-13 09:36