java - foreach 和 for 循环将重复记录复制到数组中

标签 java arrays swing

我正在构建一个电影数据库 GUI 应用程序,我需要将包含所有电影信息的数组列表转换为二维数组,以便 JTable 接受它。

它确实转换了它,但是当在 Eclipse 调试中浏览该程序时,我注意到 for 循环算法将第一个电影记录写入数组内的所有空间。

例如 [电影 1 标题、电影 1 评级、电影 1 类型][电影 1 标题、电影 1 评级、电影 1 类型] 代替 [电影 1 标题、电影 1 评级、电影 1 类型][2 标题、2 评级、2 类型]

然后,当数据库中的第二个电影记录的循环中断时,它会用第二个记录覆盖第一个电影记录,依此类推。

在该过程结束时,GUI 显示相同记录的长列表,即列表中的最后一条记录。

我不确定我的循环逻辑哪里出了问题。谁能告诉我正确的方向吗?

FilmDatabase filmList = new FilmDatabase();
    filmList = filmList.listInput("MainDBTest.txt");

    int listLen = filmList.getFilmDB().size();
    Object[][] filmTable = new Object[listLen][5];

    for (int x = 0; x < listLen; x++) {
        for(Film film : filmList.getFilmDB()) {
            //System.out.println(film);
            filmTable[x][0] = film.getFilmName();
            filmTable[x][1] = film.getFilmRating();
            filmTable[x][2] = film.getReleaseDate();
            filmTable[x][3] = film.getFilmGenre();
            filmTable[x][4] = film.getFilmCast();
            System.out.println(film);
        }
    }

    Object columnNames[] = { "Title", "Rating", "Year", "Genre", "Cast" };
    JTable mainTable = new JTable(filmTable, columnNames);

最佳答案

I need to convert the arraylist with all the Film information into a 2d array so it'll be accepted by JTable.

您不需要二维数组。事实上你不想这样做。

DefaultTableModel 将数据存储在 vector 的 vector 中。二维数组中的数据将被复制到 vector 的 vector 中。因此,使用您的方法,您将拥有 3 个数据副本:

  1. 在你的ArrayList中
  2. 在临时二维数组中
  3. 在 vector 的 vector 中。

因此,如果您确实想使用这种方法,至少您应该直接将数据复制到 Vector 并跳过 2D 数组。所以代码会是这样的:

Object columnNames[] = { "Title", "Rating", "Year", "Genre", "Cast" };
DefaultTableModel model = new DefaultTableModel(columnNames, 0);

for(Film film : filmList.getFilmDB()) 
{
    Vector<Object> row = new Vector<Object>(5)
    row.addElement( film.getFilmName() );
    row.addElement( film.getFilmRating() );
    ...
    model.addRow( row );
}

JTable mainTable = new JTable(model);

或者更好的解决方案是创建一个自定义 FilmTableModel 来直接保存所有 Film 对象。

有关此方法的分步示例,请查看 Row Table Model 中的示例。 .

关于java - foreach 和 for 循环将重复记录复制到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46751450/

相关文章:

java - 如何让 Android MediaPlayer 运行我的 http url?对于其他网址它工作得很好

java - 在 Java GUI 中显示文件预览

java - JScrollPane 中的绝对布局面板

java - groovy.swing.factory.BindProxyFactory 在哪里?

java - 循环运行到 2 的 n 次方的时间复杂度是多少

java 。序列化数组

Java:输入10个多项选择A、B、C、D并输出数字正确、错误和等级

c - 未显示 c 中结构数组的正确值

javascript - 对象数组,删除重复项但存储值(即分组)

javascript - 根据条件求和列制表符