Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ObservableList将不会显示在TableView上,因为;“重复表格列”;(JAVAFX)_Java_Javafx_Tableview_Fxml - Fatal编程技术网

ObservableList将不会显示在TableView上,因为;“重复表格列”;(JAVAFX)

ObservableList将不会显示在TableView上,因为;“重复表格列”;(JAVAFX),java,javafx,tableview,fxml,Java,Javafx,Tableview,Fxml,我试图将我的ObservableList中的数据显示到我在SceneBuilder中创建的TableView中。TableView包含三个TableColumns。我给了它们与FXML文件中完全相同的名称 我已将它们导入控制器,如下图[1]所示 然后我试着运行我的代码。我基本上有一首歌。这首歌由标题、艺术家和专辑组成。我想在每一列上显示它,但它总是抱怨: 在TableView列列表中检测到标题为“歌曲标题”、“艺术家”、“唱片集”的重复TableColumns 然后崩溃 有人知道我做错了什么吗

我试图将我的ObservableList中的数据显示到我在SceneBuilder中创建的TableView中。TableView包含三个TableColumns。我给了它们与FXML文件中完全相同的名称

我已将它们导入控制器,如下图[1]所示

然后我试着运行我的代码。我基本上有一首歌。这首歌由标题、艺术家和专辑组成。我想在每一列上显示它,但它总是抱怨:

在TableView列列表中检测到标题为“歌曲标题”、“艺术家”、“唱片集”的重复TableColumns

然后崩溃

有人知道我做错了什么吗

@FXML
private TableView<Song> defaultTableView;

// 1) Song Title

@FXML
private TableColumn songTitleColumn;

// 2) Song artist

@FXML
private TableColumn songArtistColumn;

// 3) Song album
@FXML
private TableColumn songAlbumColumn;


public void initialize(URL location, ResourceBundle resources) {


    Song song1 = new Song("a lot.mp3");

    Song song2 = new Song("Work Out.mp3");

    Song song3 = new Song("Jesus Walks.mp3");

    Playlist myPlaylist = new Playlist("My awesome playlist");

    myPlaylist.addSong(song1);

    myPlaylist.addSong(song2);

    song1.getSongTitleFromDB();

    song1.getSongArtistFromDB();

    song1.getSongAlbumFromDB();

    myPlaylist.displayAllSongs(defaultTableView,songTitleColumn,songArtistColumn,songAlbumColumn);

    ObservableList<Song> songs = FXCollections.observableArrayList();

    songs.add(song1);

    songTitleColumn.setCellFactory(new PropertyValueFactory<Song,String>("songTitle"));

    songArtistColumn.setCellFactory(new PropertyValueFactory<Song, String>("songArtist"));

    songAlbumColumn.setCellFactory(new PropertyValueFactory<Song, String>("songAlbum"));


    defaultTableView.setItems(songs);

    defaultTableView.getColumns().addAll(songTitleColumn,songArtistColumn,songAlbumColumn);
@FXML
私有TableView-defaultTableView;
//1)歌曲名称
@FXML
私有表列songTitleColumn;
//2)歌曲艺术家
@FXML
私人表格栏目SongArtist栏目;
//3)歌曲集
@FXML
私有表列;
公共void初始化(URL位置、ResourceBundle资源){
Song song1=新歌(“很多.mp3”);
Song song2=新歌(“workout.mp3”);
Song song3=新歌(“耶稣行走.mp3”);
Playlist myPlaylist=新播放列表(“我最棒的播放列表”);
myPlaylist.addSong(song1);
myPlaylist.addSong(song2);
song1.getSongTitleFromDB();
song1.getSongArtistFromDB();
song1.getSongAlbumFromDB();
myPlaylist.displayAllSongs(defaultTableView、songTitleColumn、songArtistColumn、songAlbumColumn);
ObservableList songs=FXCollections.observableArrayList();
歌曲。添加(歌曲1);
songTitleColumn.setCellFactory(新属性值工厂(“songTitle”);
songArtistColumn.setCellFactory(新属性值工厂(“songArtist”);
songAlbumColumn.setCellFactory(新属性值工厂(“songAlbum”));
defaultTableView.setItems(歌曲);
defaultTableView.getColumns().addAll(songTitleColumn、songArtistColumn、songAlbumColumn);

您的fxml文件如下所示:


由于
columns
是一个只读列表属性,因此加载fxml文件会导致将列添加到
TableView
中。再次尝试将列添加到
TableView
会导致异常

您可以在
初始化
方法中执行此操作:

defaultTableView.getColumns().addAll(songTitleColumn, songArtistColumn, songAlbumColumn);

您需要删除此链接或在
初始化
方法中创建所有列。

您的fxml文件如下所示:


由于
columns
是一个只读列表属性,因此加载fxml文件会导致将列添加到
TableView
中。再次尝试将列添加到
TableView
会导致异常

您可以在
初始化
方法中执行此操作:

defaultTableView.getColumns().addAll(songTitleColumn, songArtistColumn, songAlbumColumn);
您需要删除此链接,或在
initialize
方法中执行所有的列创建