Просто чтобы помочь прояснить принятый ответ и, возможно, сэкономить немного времени для других, которые являются новыми для JavaFX:
Для применения JavaFX FXML, NetBeans будет автоматически генерировать свой метод запуска в главном классе следующим образом:
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
Теперь все, что нам нужно сделать, чтобы иметь доступ к классу контроллера, чтобы изменить FXMLLoader load()
метода от статической реализации к реализованным реализации, а затем мы можем использовать метод экземпляра, чтобы получить контроллер, например:
//Static global variable for the controller (where MyController is the name of your controller class
static MyController myControllerHandle;
@Override
public void start(Stage stage) throws Exception {
//Set up instance instead of using static load() method
FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
Parent root = loader.load();
//Now we have access to getController() through the instance... don't forget the type cast
myControllerHandle = (MyController)loader.getController();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
Я обнаружил, что использование статических функций проще и работает лучше, чем это решение (в меньше всего для меня). Ключом к доступу к элементам управления является наличие открытого статического экземпляра класса, который имеет доступ ко всем элементам управления и общедоступным методам. – betaman
Я знаю, что это старый вопрос ... но может ли кто-нибудь предоставить более подробную информацию о ответе w.r.t. где первые 3 строки кода и где getFooController() идет? – adeena
@adeena, FooController - это класс контроллера, определенный вами в «foo.fxml», и в коде отсутствует getFooController(). –