为了账号安全,请及时绑定邮箱和手机立即绑定

行中的JTable重复值

行中的JTable重复值

慕桂英546537 2019-06-05 13:37:39
行中的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();     }}
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

你可以试着做些改变更多原子的。

public void populate(Collection c) {
    ArrayList<ArrayList<String>> data2 = new  ArrayList<ArrayList<String>>();
    for(Item i : c.getItems()) {
        ArrayList<String> row = new ArrayList<String>();
        for(Property p : i.getProperties().values()) {
            row.add(p.toString());
        }
        data2.add(row);
    }
    data = data2;
    fireTableDataChanged();}

我猜populate再次调用populate打完电话。而且很可能c在迭代过程中发生变化。


查看完整回答
反对 回复 2019-06-05
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

1)你TableModel还没有完成,我错过了很多方法或所需的方法。JTable's生命周期TableHeader等。

2)由于有很多基于HashMap的AbstratTableModel,我建议直接返回在API中实现的数组类型

Vector<Vector<Object or String>> data; String[][] or Object[][]

而不是

ArrayList<ArrayList<String>> data;

简单的解释是XxxList Returs列和向量或字符串[]返回行

3)我建议用DefaultTableModel直接这样,您就不需要解决重复或丢失的列/行


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 749 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号