Связь между контроллерами, загруженными как дочерние

Я занимаюсь разработкой приложения со следующей структурой: Структура приложения

Он имеет main.fxml (меню и содержит область привязки), область привязки в его содержимом изменяется классом vistanavigator, который вызывает maincontroller и передает загруженный content1.fxml в качестве узла.

Я хочу передать параметры между представлениями контента, когда представление меняется с контента 1 на контент 2, я пытался, как я могу это сделать, но я не знаю как.

Вот код:

Основной класс

public class Main extends Application {



@Override
public void start(Stage stage) throws Exception{
    FXMLLoader loader2 = new FXMLLoader();
    Pane ventanaprincipal = (Pane) loader2.load(getClass().getResourceAsStream(VistaNavigator.MAIN));
    Scene scene = new Scene(ventanaprincipal);

    MainController mainController = loader2.getController();
    VistaNavigator.setMainController(mainController);
    VistaNavigator.loadVista(VistaNavigator.VISTA_SESION);
}

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

Main Controller

public class MainController implements Initializable {

    @FXML
    private AnchorPane contenido;


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

}


public void setVista(Node node) {
    contenido.getChildren().setAll(node);

}}

Класс VistaNavigator

public class VistaNavigator {


public static final String MAIN    = "main.fxml";
public static final String VISTA_SESION = "sesion.fxml";
public static final String VISTA_INTERFAZ = "interfaz.fxml";

private static MainController mainController;

public static void setMainController(MainController mainController) { 
    VistaNavigator.mainController = mainController;
}

public static void loadVista(String fxml) {
    try {
        FXMLLoader loader = new FXMLLoader(VistaNavigator.class.getResource(fxml));
        Node ventana=(Node) loader.load();
        mainController.setVista(ventana);
    } catch (IOException e) {
        e.printStackTrace();
    }
}}

Контент-контроллер

public class sessioncontroller implements Initializable {



@FXML
private TextField usuario;
@FXML
private PasswordField contrasena;
@FXML
private Button iniciobutton;
@FXML
private Label error;


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



}

@FXML
private void inicio(ActionEvent event){


    if(sesion.getusr()!=null && sesion.getemail()!=null) {

            ////HERE I WANT TO PASS VALUES TO CONTENT2.FXML
            VistaNavigator.loadVista(VistaNavigator.VISTA_INTERFAZ);

    }else {
        error.setVisible(true);
    }

}
}

Вопрос отличается от других, потому что содержимое изменяется в той же сцене, что и дочерняя опорная панель.

0 ответов

Другие вопросы по тегам