0

我创建了一个添加行函数,它将选定的行或最后一行添加到 tableModel 的末尾。当我去编辑新行时,原始行也会被编辑。我以为我创建了一个新的不同行还是创建了对原始行的引用?

int currentRow = jTable1.getSelectedRow();      

Vector data = tableModel.getDataVector(); 

    System.out.println("Vector size: " + data.size());        
if(data.size()>0){   
    if(currentRow > -1){
        Vector temp = (Vector) data.elementAt(currentRow);
        tableModel.addRow(temp);            
   }else{            
        Vector temp = new Vector(data);
        Vector helper = (Vector) temp.elementAt(temp.size()-1);

        tableModel.addRow(helper);
   }
 }else{
     outputMsg("Failed to add row.");
 }
4

1 回答 1

2

您没有创建对原始行的引用,但两行Vector对它们的数据使用相同的实例,并且向量中包含相同的数据对象。因此,您的原始行和新行都由完全相同的数据支持,因此在一行中进行的修改将反映在另一行中。

一个可能的解决方案是复制该表行表示的数据,并根据该数据的副本创建一个新行。如何创建该副本将取决于数据,尽管一个非常天真的实现可能是使用 clone 方法(而不是 的克隆Vector,而是 中包含的数据Vector

于 2012-04-24T16:27:15.213 回答