Javafx仅初始化一次控制器构造函数?

时间:2020-05-19 09:53:40

标签: java javafx controller

我正在构建Javafx gui应用程序,并且遇到了这个问题。我的程序确实有多个场景,所以我有不同的FXML文件和Controller类。问题是,在第一个“主菜单”(这是我的应用程序中弹出的第一个)场景中,在控制器的构造函数中,我调用了一些繁重的方法来从数据库中加载数据等等。 那么这会发生什么。在接下来的场景中,我确实具有“主菜单按钮”,可以切换到“主菜单”场景!因此,每次我回到“主菜单”场景时,构造函数都会调用繁重的方法来加载数据。而我不想要那样。我不想每次都只调用一次这些方法。 这是一些简化的示例代码:

主菜单场景(控制器)

public class MainController {

    @FXML
    Button bt1 = new Button();
    @FXML
    Button bt2 = new Button();
    @FXML
    Button bt3 = new Button();
    public static int choice=0;

    //constructor
    public MainController(){
        try {
           //heavy databse tasks here(loading data)
        }catch (Exception e){
            //error handling
        }


    }

    @FXML
    public void initialize(){}
}

另一个控制器类

public class Scene2Controller {

    private Button mainMenu = new Button();

    //constructor
    public Scene2Controller(){}

    @FXML
    public void initialize(){}

    public void goMainMenu(ActionEvent actionEvent) throws IOException {
        Parent menu= FXMLLoader.load(getClass().getResource("/mainScene.fxml"));
        Stage window = (Stage) mainMenu.getScene().getWindow();
        window.getScene().setRoot(menu);
        window.show();
    }
}

因此,在第二个控制器中,我有一个侦听器方法,当单击按钮时,它将返回主菜单场景,并加载适当的FXML文件。

我知道这对大多数人来说是很直接的,但是javafx中的我是新手,我想知道我是否在切换场景时做错了什么,或者我应该为我使用的这些方法做些不同的事情mainMenu构造函数类,以仅一次运行。那是可获得的,还是我应该创建一个在主菜单场景之前运行的Sub-Controller类?预先感谢。

1 个答案:

答案 0 :(得分:0)

就我而言,我不得不调用几个方法,因此我只是将它们从第一个Scene Controller类中删除,然后将它们添加到start()中的MainClass方法中,而不是添加到Controller类中。我认为@James_D的回答对于像我这样的类似问题总体上是最好的。谢谢!

相关问题