Как обеспечить доступ JavaFX-контроллерам к primaryStage с помощью Spring без жесткого связывания?

106
30 ноября 2020, 11:20

На момент написания данного вопроса я нахожусь в самом начале понимания концепции инъекции зависимости, и всё, что умею делать с 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");
}
Answer 1

Если нужен доступ к stage внутри контроллера, то эта задача решается проще. Любой графический контрол, являющийся полем класса и аннотированный @FXML, знает в какой stage он находится.

((Stage)myPane.getScene().getWindow())
READ ALSO
java работа с текстом

java работа с текстом

Есть текстовый фаил, в котором записано следующие:

112
Вопрос по дженерикам метода и ограничению переменных типов

Вопрос по дженерикам метода и ограничению переменных типов

Сейчас активно изучаю (или даже разбираю) известное пособие Хорстмена и Корнелла по Java2В данный момент остановился на параметризации

110
Java / C# Почему одна функция с одинаковыми параметрами показывает разное время выполнения?

Java / C# Почему одна функция с одинаковыми параметрами показывает разное время выполнения?

Во время написания программы у меня возник вопрос, ответ на который я не смог найтиЯ замеряю время выполнения одной функции в наносекундах...

97