Método de inicialización del controlador JavaFX FXML no invocado

Estoy tratando de llenar ListView desde el contenido de un ArrayList simple. Aquí está mi

Archivo controlador.java:

package design; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import javafx.beans.property.ListProperty; import javafx.beans.property.SimpleListProperty; import javafx.collections.FXCollections; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ListView; public class Controller { @FXML private Button buttontest; @FXML private ListView listViewofSongs; protected List songList = new ArrayList(); protected ListProperty listProperty = new SimpleListProperty(); Song Language = new Song("Peter", "myalbum", "yes", 2010); public void addSong(Song song){ songList.add(song); } public void initialize(URL url, ResourceBundle rb) { addSong(Language); listViewofSongs.setItems(FXCollections.observableList(songList)); } } 

Y aquí está mi archivo Style.fxml:

                                        

El progtwig se ejecuta, pero la canción que ingresé no aparece en el ListView (y la clase Song tiene un método toString).

¿Que puedo hacer?

El problema era que el controlador no estaba siendo inicializado como el que preguntaba la pregunta.

El funcionamiento del FXMLLoader en Java 8 es un poco extraño.

  1. Si define un método de initialize() sin parámetros initialize() en su Controlador y no implementa la interfaz Initializable , el cargador FXML invocará automáticamente el método de inicialización.

  2. Si, por el contrario, define un método de public void initialize(URL url, ResourceBundle rb) vaciada parametrizada public void initialize(URL url, ResourceBundle rb) en su Controlador, el cargador de FXML no invocará automáticamente el método de inicialización a menos que su controlador también implemente la interfaz Initializable .

Como el código de la pregunta utilizaba un método de inicialización parametrizado y no implementaba también Initializable, no se producía la inicialización.

Si veo correctamente, en realidad no usas la URL y los parámetros de ResourceBundle en tu método initialize() . Si la URL es la ruta a su archivo fxml, y el ResourceBundle contiene propiedades de internatonalización para su GUI, entonces debe definir su método initialize() sin parámetros, pero anotado con @FXML . La URL y el ResourceBundle deben pasarse al FXMLLoader.

Me gusta

 FXMLLoader loader = new FXMLLoader(URL, rb); 

y

 @FXML private void initialize() { ... } 

De esta manera se invocará automáticamente initialize() .

Necesitaba implementar Initializable en la clase y agregar un @Override antes de llamar al método.