在表格模式中编辑重复行,也编辑原始行

时间:2012-04-24 16:20:05

标签: swing reference vector jtable tablemodel

我创建了一个添加行功能,它将选定的行或最后一行添加到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.");
 }

1 个答案:

答案 0 :(得分:2)

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

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