将arraylist对象存储/跟踪到表格元素

时间:2017-03-12 10:14:32

标签: java swing arraylist

问:我如何跟踪哪个ArrayList元素属于JTable中哪个元素,以便我以后必须将它们全部放在一个ArrayList中?

具体:

我有一个界面Media,还有3个实现它的类:BookMovieAlbumAlbumArrayList Songs(显然也是我制作的课程)。

我按照JTable的惯例制作了Object[][],我可以暂时放入String s,int等等,用户可以添加行,删除行,编辑单元格,然后我计划浏览数据并在JTable中指定每个内容,并将它们放入名为 ListOne ArrayList中输入Media,这样我就可以使用ObjectOutputStream并保存List(是的,这是作业中的要求,我个人会保持简单。)

但问题是SongsArrayList课程中是Album,因此我使用JFrame创建了另一个JTable,其中可以同样填写那一个,然后我想我会把用户提供的所有歌曲存储到一个临时的Album - 对象中。但是我从哪里开始呢?如果用户删除了第一个Album中的相应JTable,我无法像这样跟踪它们。

如果我将这些Album存储在名为 ListTwo ArrayList中,并且如果用户决定在 ListOne 中删除no.6,而且6号恰好是Album,我现在必须知道要在 ListTwo 中删除哪一个,并确保其他人的ID或密钥不会因此而受到影响,因为我将来需要妥善配对。我需要知道 ListTwo 中哪些Album的歌曲要转移到 ListOne 中的哪个Album,以便稍后保存。

那么我将如何跟踪这个并在以后连接它们呢?

初步代码:

媒体界面类:

public interface Media {
    void setAuthor(String author);
    String getAuthor();
}

图书课程:

public class Book implements Media {

    private String author;

    Book(){
        this.author = "";

    }

    @Override
    public void setAuthor(String author) {
        this.author = author;
    }
    @Override
    public String getAuthor() {
        return this.author;
    }

}

CD(专辑)课程:

import java.util.ArrayList;

public class CD implements Media {

    public class Song {
        private int seconds;
        private String songName;
        private String artist;

        Song(String name, int seconds, String artist){
            this.songName = name;
            this.seconds = seconds;
            this.artist = artist;
        }

        public String getName(){
            return this.songName;
        }
        public void setName(String name){
            this.songName = name;
        }
    }

    private ArrayList<Song> songs;

    private String artist;

    CD(){
        songs = new ArrayList<Song>();
        this.artist = "";
    }

    public void addSong(String name, int seconds, String artist){
        this.songs.add(new Song(name, seconds, artist));
    }
    public void removeSong(int position){
        this.songs.remove(position);
    }

    @Override
    public void setAuthor(String author){
        this.artist = author;
    }

    @Override
    public String getAuthor(){
        return this.artist;
    }
}

电影课:

public class Movie implements Media {

    private String producer;

    Movie(){
        this.producer = "";
    }

    @Override
    public void setAuthor(String author){
        this.producer = author;
    }
    @Override
    public String getAuthor(){
        return this.producer;
    }
}

表: http://pastebin.com/ETJGuQhD

1 个答案:

答案 0 :(得分:0)

我的解决方案是为每个可添加到最终ArrayList的对象类型制作3个Add-button而不是one-one。然后我创建了三个单独的add-functions,每个按钮一个,每个我不仅添加一个已经选择的特定类型的行,我还将该类型的对象直接添加到最终的ArrayList。然后我使用table.getRowSelection()作为createTable函数的一部分来选择在完成歌曲列表时要更改ArrayList中的哪一个。之后歌曲直接存储在指出的Album对象中。

这样我可以确定一切都在正确的地方,即使它有点笨重。但我宁愿按时完成而不是按时完成。