Otra solución es configurar el controlador desde su clase de controlador, como ...
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);
}
}
Esta es la solución que yo prefiero usar ya que el código es un poco desordenado para crear una instancia de FXMLLoader completamente funcional que maneja adecuadamente los recursos locales, etc.
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml"));
}
frente
@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));
}
he encontrado que el uso de funciones estáticas es más fácil y funciona mejor que esta solución (al menos para mí). La clave para poder acceder a los controles es tener una instancia pública estática de la clase que tiene acceso a todos los controles y métodos públicos. – betaman
Sé que esta es una vieja pregunta ... pero ¿alguien puede proporcionar más detalles sobre la respuesta w.r.t. donde van las primeras 3 líneas de código y donde va el getFooController()? – adeena
@adeena, FooController es una clase de controlador definida por usted en "foo.fxml", y no hay getFooController() en el código. –