问:我如何跟踪哪个ArrayList
元素属于JTable
中哪个元素,以便我以后必须将它们全部放在一个ArrayList
中?
具体:
我有一个界面Media
,还有3个实现它的类:Book
,Movie
,Album
。 Album
有ArrayList
Songs
(显然也是我制作的课程)。
我按照JTable
的惯例制作了Object[][]
,我可以暂时放入String
s,int
等等,用户可以添加行,删除行,编辑单元格,然后我计划浏览数据并在JTable
中指定每个内容,并将它们放入名为 ListOne 的ArrayList
中输入Media
,这样我就可以使用ObjectOutputStream
并保存List
(是的,这是作业中的要求,我个人会保持简单。)
但问题是Songs
在ArrayList
课程中是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;
}
}
答案 0 :(得分:0)
我的解决方案是为每个可添加到最终ArrayList的对象类型制作3个Add-button而不是one-one。然后我创建了三个单独的add-functions,每个按钮一个,每个我不仅添加一个已经选择的特定类型的行,我还将该类型的对象直接添加到最终的ArrayList。然后我使用table.getRowSelection()作为createTable函数的一部分来选择在完成歌曲列表时要更改ArrayList中的哪一个。之后歌曲直接存储在指出的Album对象中。
这样我可以确定一切都在正确的地方,即使它有点笨重。但我宁愿按时完成而不是按时完成。