foreach和for循环将重复记录复制到Array中

时间:2017-10-15 03:41:41

标签: java arrays swing

我正在构建一个电影数据库GUI应用程序,我需要将带有所有电影信息的arraylist转换为2d数组,以便JTable接受它。

它确实转换它,但是当在Eclipse Debug中遍历程序时,我注意到for循环算法将第一个Film Record写入数组中的所有空间。

e.g。 [Movie1Title,Movie1Rating,Movie1Genre] [Movie1Title,Movie1Rating,Movie1Genre] 代替 [Movie1Title,Movie1Rating,Movie1Genre] [2Title,2Rating,2Genre]

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

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

我不确定我的循环逻辑错误在哪里。任何人都可以向我发送正确的方向吗?

$("#system_message_spacer").css("padding-top", "82px");

1 个答案:

答案 0 :(得分:1)

  

我需要将带有所有电影信息的arraylist转换为2d数组,以便JTable接受它。

您不需要2D阵列。事实上,你不想这样做。

DefaultTableModel将数据存储在Vector of Vector中。来自2D阵列的数据将被复制到Vector of Vector。因此,使用您的方法,您将拥有3份数据副本:

    中的
  1. 临时二维数组中的
  2. 在矢量矢量中。
  3. 因此,如果您真的想使用这种方法,至少应该直接将数据复制到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来直接保存所有电影对象。

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