Innym rozwiązaniem jest ustawienie kontrolera z poziomu kontrolera, tak jak ...
public class Controller implements javafx.fxml.Initializable {
@Override
public void initialize(URL location, ResourceBundle resources) {
// Implementing the Initializable interface means that this method
// will be called when the controller instance is created
App.setController(this);
}
}
To rozwiązanie wolę używać, ponieważ kod jest nieco niechlujny, aby stworzyć w pełni funkcjonalną instancję FXMLLoader które prawidłowo obsługuje lokalnych zasobów itp
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml"));
}
kontra
@Override
public void start(Stage stage) throws Exception {
URL location = getClass().getResource("/sample.fxml");
FXMLLoader loader = createFXMLLoader(location);
Parent root = loader.load(location.openStream());
}
public FXMLLoader createFXMLLoader(URL location) {
return new FXMLLoader(location, null, new JavaFXBuilderFactory(), null, Charset.forName(FXMLLoader.DEFAULT_CHARSET_NAME));
}
i odkryli, że przy użyciu funkcji statycznych jest łatwiejsze i działa lepiej niż tego rozwiązania (w najmniej dla mnie). Kluczem do uzyskania dostępu do elementów sterujących jest posiadanie publicznej statycznej instancji klasy, która ma dostęp do wszystkich elementów sterujących i metod publicznych. – betaman
Wiem, że to stare pytanie ... ale czy ktoś może podać więcej szczegółów na temat odpowiedzi w.r.t. gdzie znajdują się pierwsze 3 linie kodu i gdzie znajduje się getFooController()? – adeena
@adeena, FooController jest klasą kontrolera zdefiniowaną przez ciebie w "foo.fxml", aw kodzie nie ma getFooController(). –