我想随时与 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/