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