行中的JTable重复值

行中的JTable重复值

我有一个JTable用自定义填充DataModel(粘贴在下面)当我调用populate()方法,it出现使用重复数据填充表-每行都一次又一次地填充相同的值。然而,在更仔细的检查(通过简单的println()对‘data’字段),数据模型没有错误-它持有正确的数据,以我预期的格式。什么给予?

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();
    }}


慕桂英546537
浏览 750回答 3
3回答

四季花海

你可以试着做些改变更多原子的。public&nbsp;void&nbsp;populate(Collection&nbsp;c)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ArrayList<ArrayList<String>>&nbsp;data2&nbsp;=&nbsp;new&nbsp;&nbsp;ArrayList<ArrayList<String>>(); &nbsp;&nbsp;&nbsp;&nbsp;for(Item&nbsp;i&nbsp;:&nbsp;c.getItems())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList<String>&nbsp;row&nbsp;=&nbsp;new&nbsp;ArrayList<String>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(Property&nbsp;p&nbsp;:&nbsp;i.getProperties().values())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row.add(p.toString()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data2.add(row); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;data2; &nbsp;&nbsp;&nbsp;&nbsp;fireTableDataChanged();}我猜populate再次调用populate打完电话。而且很可能c在迭代过程中发生变化。

慕雪6442864

1)你TableModel还没有完成,我错过了很多方法或所需的方法。JTable's生命周期TableHeader等。2)由于有很多基于HashMap的AbstratTableModel,我建议直接返回在API中实现的数组类型Vector<Vector<Object&nbsp;or&nbsp;String>>&nbsp;data;&nbsp;String[][]&nbsp;or&nbsp;Object[][]而不是ArrayList<ArrayList<String>>&nbsp;data;简单的解释是XxxList Returs列和向量或字符串[]返回行3)我建议用DefaultTableModel直接这样,您就不需要解决重复或丢失的列/行
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java