我用Google搜索了一整天,但我找不到问题的答案。
我正在使用MVC模式。
基本上我有一个我需要在JTable
中显示的歌曲列表(id,title,author等)。歌曲存储在MySQL数据库中。与数据库的连接工作正常。
我目前正在将数据库中的所有秒数存储在'ArrayList'
中这是我到目前为止所做的:
存储歌曲的代码:
SongDAO songDAO = new SongDAO();
ArrayList<Song> songs = songDAO.findAll();
打印出歌曲时,我得到了这个输出:
[oop.model.entities.Song@1055e4af, oop.model.entities.Song@3caeaf62, oop.model.entities.Song@e6ea0c6, oop.model.entities.Song@6a38e57f]
这是我播放第一首歌的地方:
if (songs.isEmpty()) {
library = null;
} else {
library = songs.get(0);
Mainframe.setVisible(true);
firstController();
}
public static Library getLibrary() {
return library;
}
库静态工厂方法:
public static void firstController() {
new libraryController(view.libraryView);
}
我很确定问题出在这里。我无法理解我的生活。
public class libraryController {
private libraryView view;
public libraryController(libraryView view) {
this.view = view;
for (Song song : baseController.getLibrary().getSongs()) {
view.addSong(song);
}
updateView();
}
public void updateView() {
view.setSongs(baseController.getLibrary().getSongs());
}
}
我已经尝试了System.out.println(baseController.getLibrary().getSongs())
,但我得到的只是[ ]
。这让我相信getSongs()
方法是原因。
public void setSongs(ArrayList<Song> songs) {
for (Song song : songs) {
addSong(Song);
}
}
public void addSong(Song song) {
Object[] row = new Object[]{song.getId(), song.getTitle(), song.getArtist(), song.getAlbum(), song.getGenre(), song.getYear()};
model.addRow(row);
}
这是我的图书馆类:
public class Library {
private ArrayList<Song> songs;
private int id;
private Song song;
public Library() {
id=0;
songs = new ArrayList<Song>(20);
}
public ArrayList<Song> getSongs() {
return songs;
}
public Libreria setSongs(ArrayList<Song> songs) {
this.songs = songs;
return this;
}
}
我的歌曲课程:
public class Song extends Library {
private int id;
private String title;
private String artist;
private String album;
private String genre;
private int year;
private Library library;
public Song(){
id = 0;
}
public int getId() {return id; }
public void setId(int id) {this.id = id;}
public String getTitle() { return title;}
public void setTitle(String title) {this.title = title;}
public String getArtist() { return artist;}
public void setArtist(String artist) {this.artist = artist;}
public String getAlbum() {return album;}
public void setAlbum(String album) {this.album = album; }
public String getGenre() {return genre;}
public void setGenre(String genre) {this.genre = genre;}
public int getYear() {return year;}
public void setYear(int year) {this.year = year;}
public Library getLibrary() {return library;}
public Song setLibrary(Library library) {
this.library = library;
return this;
}
}
如果有人可以帮助我,那将非常感激。
答案 0 :(得分:4)
基本上我必须在JTable中显示我的歌曲(&#39; id&#39;,&#39; title,&#39; author&#39;,&#39; ..&#39;)
Swing组件已经使用修改版的MVC设计。
如果要在JTable中显示数据,只需将数据加载到TableModel中即可。
因此,您可能需要创建自定义TableModel,以便保留Song对象。
它将逐步显示如何为Song对象创建自定义模型。或者,如果您愿意,可以使用通用let pattern = expression
来简化编码。
创建SongTableModel后,使用它的代码将类似于:
TableRowModel