我使用MVC-Pattern实现了一个简单的应用程序,并使用控制台输出。现在我尝试用简单的JavaFX-Approach替换控制台来测试我的设计的独立性。
Controller类 Admin 涵盖了整个逻辑。它有一个对象a_view,它在创建时被初始化并实现了IView接口,它有一个showWelcomeText()函数。
我在Main.java中初始化场景和控制器:
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader fxmlLoader = new FXMLLoader();
Parent root = fxmlLoader.load(getClass().getResource("/view/DesktopApp.fxml").openStream());
Scene scene = new Scene(root,800,500);
primaryStage.setScene(scene);
primaryStage.show();
IView a_view = (IView) fxmlLoader.getController(); // JavaFXGUI class connected to the root
//a_view.showWelcomeMessage(); // shows message
Admin secretary = new Admin(a_view);
secretary.manage(); // shows empty Form
} catch(Exception e) {
e.printStackTrace();
}
}
JavaFXGUI控制器作为参数传递,然后在管理类中初始化。
public Admin(IView a_view){
this.a_view = a_view;
md_list = dao.MembersDAO.jaxbXMLToObject(); // read out of XML
}
public void manage(){
a_view.showWelcomeMessage();
然而,当我运行该程序时,它只显示一个空表单,并且不显示欢迎文本。如果我注释掉manage()的调用并直接调用a_view.showWelcomeMessage()它就可以正常工作并且消息显示在表单中。
我认为将变量(a_view)作为参数传递可能是个问题(例如Java不传递引用),所以我也尝试在Admin类中将它声明为静态公共。即使两个调用都引用相同的对象,它也会导致相同的结果。
我搜索了很多内容以及其他内容,我看到了关于如何访问控制器的这个帖子Accessing FXML controller class 但无法使其与原始控制器类的调用一起使用。调用public static(或private和pass as参数)和从start方法调用它的区别在哪里?
亲切的问候