JavaFX FXML Controller初始化方法未被调用

我试图从一个简单的ArrayList的内容填充ListView。 这是我的

Controller.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)); } } 

这是我的Style.fxml文件:

                                        

该程序运行,但我输入的歌曲没有出现在ListView中(并且Song类有一个toString方法)。

我能做什么?

问题在于,财务主任并未作为预期问题的提问者进行初始化。

在Java 8中FXMLLoader的操作有点奇怪。

  1. 如果在Controller中定义了无参数的initialize()方法并且没有实现Initializable接口,那么FXML加载器仍将自动调用initialize方法。

  2. 相反,如果在Controller中定义参数化的public void initialize(URL url, ResourceBundle rb)方法,则FXML加载器不会自动调用initialize方法, 除非您的控制器也实现了Initializable接口。

由于问题中的代码使用的是参数化初始化方法而不是实现Initializable,因此未进行初始化。

如果我看得正确,您实际上不使用initialize()方法中的URL和ResourceBundle参数。 如果URL是fxml文件的路径,并且ResourceBundle包含GUI的internatonalization属性,那么您应该定义不带参数的initialize()方法,但使用@FXML注释。 应将URL和ResourceBundle传递给FXMLLoader。

喜欢

 FXMLLoader loader = new FXMLLoader(URL, rb); 

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

这样就会自动调用initialize()

我需要在类中实现Initializable并在调用方法之前添加@Override。