我正在构建一个电影数据库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");
答案 0 :(得分:1)
我需要将带有所有电影信息的arraylist转换为2d数组,以便JTable接受它。
您不需要2D阵列。事实上,你不想这样做。
DefaultTableModel
将数据存储在Vector of Vector中。来自2D阵列的数据将被复制到Vector of Vector。因此,使用您的方法,您将拥有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中的示例。