我正在构建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类?预先感谢。
答案 0 :(得分:0)
就我而言,我不得不调用几个方法,因此我只是将它们从第一个Scene Controller类中删除,然后将它们添加到start()
中的MainClass
方法中,而不是添加到Controller类中。我认为@James_D的回答对于像我这样的类似问题总体上是最好的。谢谢!