На момент написания данного вопроса я нахожусь в самом начале понимания концепции инъекции зависимости, и всё, что умею делать с ApplicationContext из Spring - это объявлять бины в xml-файле, а также создавать интерфейсы, их реализации, а также получать их, например:
public static void main (String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
IFilesManager FilesManager = (dev.example.FilesManager.FilesManager) applicationContext.getBean("FilesManager");
FilesManager.initializeUserFiles();
}
Этих знаний недостаточно, чтобы справиться с такой задачей: нужно передать primaryStage (экземпляр javafx.stage.Stage) в контроллер. Стандартно, это делается через жесткое связывание главного класса приложения и контроллера.
В главном классе приложения:
// Даём контроллеру доступ к главному приложению.
PersonOverviewController controller = loader.getController();
controller.setMainApp(this);
В контроллере:
/**
* Вызывается главным приложением, которое даёт на себя ссылку.
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
Стандартно, primaryState можно получить от MainApp через геттер последнего:
public Stage getPrimaryStage() {
return primaryStage;
}
Вопрос такой: можно ли сделать это через ApplicationContent? Стандартно, primaryStage является полем главного класса приложения, которое инициализируется в методе start, который должен быть реализован в наследнике javafx.application.Application.
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("JavaFX test");
}
Если нужен доступ к stage внутри контроллера, то эта задача решается проще. Любой графический контрол, являющийся полем класса и аннотированный @FXML, знает в какой stage он находится.
((Stage)myPane.getScene().getWindow())
Продвижение своими сайтами как стратегия роста и независимости