Я в настоящее время делает Java (+, используя MySQL) приложение для моих исследований: База данных для HopitalПолучение переменной из FXML в импортированной FXML
Я закодировать свой интерфейс с помощью JavaFX. У меня есть основной FXML (для общего вида), где у меня есть вкладки, и на каждой вкладке я импортирую другой FXML, используя (fx: include). Так что каждый модуль моего приложения имеет свой собственный контроллер и собственный проект View.
Как передать переменную от главного контроллера к другим контроллерам?
Спасибо! Редактировать: Позвольте мне показать вам мой код
Итак, сначала это класс, в котором я загружаю свой файл fxml (сначала у меня есть окно Connexion, и если информация, необходимая для подключения, в порядке, я загружаю fxml Main с помощью основной интерфейс) и я поставил Connexion (ИЗМЕНЯЕМЫЙ мне нужно отправить), что я получил от моего FXML Connexion к FXML главной
public class MainApp extends Application {
private Stage primaryStage;
private Connection conn;
MainController controllermain = new MainController();
//ConnexionController controllerconnex;
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("BASE DE L'HOPITAL DU ZOB");
showConnexion();
}
public void showConnexion() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("Connexion.fxml"));
Parent page = (AnchorPane) loader.load();
Scene scene = new Scene(page);
primaryStage.setScene(scene);
primaryStage.show();
ConnexionController controller = loader.getController();
controller.setMainApp(this);
} catch (IOException e) {
e.printStackTrace();
}
}
public void showMainApp(Connection conn) {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("Main.fxml"));
AnchorPane page = (AnchorPane) loader.load();
Scene scene = new Scene(page);
primaryStage.setScene(scene);
primaryStage.show();
this.conn = conn;
controllermain = loader.getController();
controllermain.setMainApp(this);
controllermain.setConnexion(conn); // I want to send the variable conn to the others
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Тогда это мой главный контроллер, и вы можете видеть, что Я получаю переменную связь только с помощью метода set, а затем могу отправить его другому контроллеру
public class MainController implements Initializable {
private MainApp mainApp;
private Button retour;
protected Connection conn;
FXML AchorPane ;
public MainController() {
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
public void setConnexion(Connection conn){
this.conn=conn;
}
public void handleRetour(){
mainApp.showConnexion();
}
}
}
Да, спасибо большое! Но если у меня нет переменной, которую я хочу задать до того, как будет вызван метод initialize, это все еще возможно или нет другого пути? –
Поле 'tabController' в примере кода является переменной экземпляра, поэтому оно останется в пределах срока действия« MainController ». Поэтому всякий раз, когда вам нужна переменная, вы можете передать ее в 'tabController'. (Например, если он установлен в обработчике событий, вы можете ссылаться на 'tabController' в обработчике событий.) Вы также можете определить [свойства JavaFX] (http://www.oracle.com/pls/topic/lookup ? ctx = javase80 и id = JFXBD107) в обоих контроллерах и создавать привязки между ними ... Если вы измените свой вопрос, чтобы быть более конкретным, когда значения доступны, я могу обновить ответ. –
Я отредактировал мой вопрос, чтобы вы могли видеть мой код. –