Java 引用MainController中的现有FXML控制器

Java 引用MainController中的现有FXML控制器,java,javafx,model-view-controller,Java,Javafx,Model View Controller,我的项目中有多个控制器,但现在我只指定3个(MainController,CarController,ClientController)。我想做的是保存退出程序时更改的所有数据,因此基本上在stop()方法中,我希望能够访问我的CarController和ClientController保存方法。我不知道我是否需要一个主控制器;它引用了以前的控制器。代码示例: Main: import Controller.CarController; import Controller.ClientContr

我的项目中有多个控制器,但现在我只指定3个(MainControllerCarControllerClientController)。我想做的是保存退出程序时更改的所有数据,因此基本上在
stop()
方法中,我希望能够访问我的CarController和ClientController
保存方法。我不知道我是否需要一个主控制器;它引用了以前的控制器。代码示例:

Main

import Controller.CarController;
import Controller.ClientController;
import Controller.MainController;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    public FXMLLoader mainLoader;
    public MainController mainController;

    @Override
    public void start(Stage primaryStage) throws Exception{
        this.mainLoader = new FXMLLoader(getClass().getResource("/View/Main.fxml"));
        Parent root = mainLoader.load();
        this.mainController = this.mainLoader.getController();
        primaryStage.setTitle("Reservation system");
        primaryStage.setScene(new Scene(root, 1000, 600));
        primaryStage.show();
    }

    @Override public void stop(){
        this.mainController.save(); //Should have reference to CarController & ClientController
    }

    public static void main(String[] args) {
        launch(args);
    }
}
package Controller;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;

import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    public CarController carController;
    @FXML
    public ClientController clientController;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

    }

    public void setCarController(CarController carController) {
        this.carController = carController;
    }
    public void setClientController(ClientController clientController) {
        this.clientController = clientController;
    }

    public void save(){
        this.clientController.saveClientsToFile();
        this.carController.saveToFile();
    }
}
主控制器

import Controller.CarController;
import Controller.ClientController;
import Controller.MainController;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    public FXMLLoader mainLoader;
    public MainController mainController;

    @Override
    public void start(Stage primaryStage) throws Exception{
        this.mainLoader = new FXMLLoader(getClass().getResource("/View/Main.fxml"));
        Parent root = mainLoader.load();
        this.mainController = this.mainLoader.getController();
        primaryStage.setTitle("Reservation system");
        primaryStage.setScene(new Scene(root, 1000, 600));
        primaryStage.show();
    }

    @Override public void stop(){
        this.mainController.save(); //Should have reference to CarController & ClientController
    }

    public static void main(String[] args) {
        launch(args);
    }
}
package Controller;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;

import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    public CarController carController;
    @FXML
    public ClientController clientController;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

    }

    public void setCarController(CarController carController) {
        this.carController = carController;
    }
    public void setClientController(ClientController clientController) {
        this.clientController = clientController;
    }

    public void save(){
        this.clientController.saveClientsToFile();
        this.carController.saveToFile();
    }
}
我不知道我尝试访问的方法在这一点上是否重要。如果你坚持,我以后再加。我有多个FXML文件,所有控制器分别工作。希望你能理解我的问题,如果没有,如果有人回应,我会尽力更好地解释


问题:如何从我的主控制器访问我的CarController和ClientController?

基于您对字段的命名方式,我假设您正在使用
fx:include
。这意味着这些控制器将被注入主控制器。这些字段是公共字段,因此您可以直接访问它们。如果不是这样,或者有些东西不起作用,那么请提供一个(包括FXML文件)。听起来像是重复的-