У меня есть 2 файла FXML с 2 отдельными контроллерами FXML. Они в одной упаковке.
Я хочу изменить свойство включения стековой панели в первом окне (first_controller.java), если я нажму кнопку во втором окне. Какое решение самое простое?
(Я попытался объединить документы контроллера, и я сказал обоим двум fxml использовать один и тот же контроллер, чтобы сделать это простым способом, но не сработало. Может быть, controller.java может использовать только 1 источник FXML?)
2 ответа
Прошу вас, пожалуйста, не используйте статический способ только из-за простоты! Есть нормальное решение вашей проблемы.
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("Example.fxml"));
Parent root = (Parent) loader.load();
YourController controller1 = loader.getController();
controllerOfSecondFXML.methodToPassYourController(controller1);
Таким образом, если вы разделите загрузку FXML, вы можете легко получить контроллеры ваших FXML и использовать их методы. Просто возьмите контроллер, как я написал выше, и передайте его другому. Это объектно-ориентированный способ.
Наконец я нашел решение.
В первом FXMLController StackPane должен использоваться как «общедоступный статический Stackpane». В этом случае другой контроллер FXML может использовать это и изменить значение реального экземпляра.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.