我创建了一个添加行功能,它将选定的行或最后一行添加到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.");
}
答案 0 :(得分:2)
您没有创建对原始行的引用,但是这两行对其数据使用相同的Vector
实例,并且向量中包含相同的数据对象。因此,作为新行的原始行都由完全相同的数据支持,因此在一行中进行修改将反映在另一行中。
可能的解决方案是复制该表行所代表的数据,并根据该数据的副本创建一个新行。如何创建该副本将取决于数据,尽管一个非常天真的实现可能是使用克隆方法(而不是Vector
的克隆,而是Vector
)中包含的数据< / p>