从预定义的Controller类访问FXML Controller Class

时间:2016-09-29 09:51:17

标签: java model-view-controller javafx controller fxml

我使用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方法调用它的区别在哪里?

亲切的问候

0 个答案:

没有答案