Связь между контроллерами, загруженными как дочерние
Я занимаюсь разработкой приложения со следующей структурой: Структура приложения
Он имеет 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);
}
}
}
Вопрос отличается от других, потому что содержимое изменяется в той же сцене, что и дочерняя опорная панель.