Getter方法返回null。 Java MVC

时间:2016-03-15 18:38:08

标签: java mysql swing model-view-controller methods

我用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;
    }
}

如果有人可以帮助我,那将非常感激。

1 个答案:

答案 0 :(得分:4)

  

基本上我必须在JTable中显示我的歌曲(&#39; id&#39;,&#39; title,&#39; author&#39;,&#39; ..&#39;)

Swing组件已经使用修改版的MVC设计。

如果要在JTable中显示数据,只需将数据加载到TableModel中即可。

因此,您可能需要创建自定义TableModel,以便保留Song对象。

查看Table Row Model

它将逐步显示如何为Song对象创建自定义模型。或者,如果您愿意,可以使用通用let pattern = expression来简化编码。

创建SongTableModel后,使用它的代码将类似于:

TableRowModel