【发布时间】:2012-02-26 07:50:42
【问题描述】:
我有一个JTable 填充了自定义DataModel(粘贴在下面),当我调用populate() 方法时,它似乎用重复的数据填充表格 - 每行都是一遍又一遍地填充相同的值。然而,仔细检查(通过简单地 println() 处理“数据”字段),数据模型没有错误——它以我期望的格式保存正确的数据。什么给了?
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
@SuppressWarnings("serial") // we don't expect this app to ever use serialized classes. EVER.
public class CollectionDataModel extends AbstractTableModel {
private ArrayList<ArrayList<String>> data;
public CollectionDataModel() {
data = new ArrayList<ArrayList<String>>();
}
@Override
public int getColumnCount() {
if(data.isEmpty()) return 0;
return data.get(0).size();
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(rowIndex > getRowCount()) return null;
if(columnIndex > getColumnCount()) return null;
return data.get(rowIndex).get(columnIndex);
}
public void populate(Collection c) {
data.clear();
for(Item i : c.getItems()) {
ArrayList<String> row = new ArrayList<String>();
for(Property p : i.getProperties().values()) {
row.add(p.toString());
}
data.add(row);
}
fireTableDataChanged();
}
}
【问题讨论】:
-
我在您发布的代码中没有看到明显的错误。如果您没有很快得到一个像样的答案,您可能需要做更多的调试来尝试准确地隔离 where 发生错误。另外,您是否使用自定义渲染器?它会显示错误的数据吗?运气!
-
不,默认渲染器,我会继续关注它,谢谢。至少我知道我不会发疯!
-
您是否在为表格使用单元格渲染?
-
@ChrisBrowne:我不声称你的理智程度或稳定性。
-
@HovercraftFullOfEels 采取明智的立场,在我编程时它有泄漏的趋势。