2012-04-24 9 views
0

私は、選択した行または最後の行をtableModelの最後に追加する行追加機能を作成しました。移動して新しい行を編集すると、元の行も編集されます。私は新しい別個の行を作成したと思ったか、元の行への参照を作成しましたか?tableModeで重複行を編集し、元の行も編集します

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."); 
} 

答えて

2

元の行への参照を作成しなかったが、両方の行は、ベクターに含まれる同じデータ・オブジェクトとのデータのために同じVectorインスタンスを使用します。したがって、新しい行としての元の行は全く同じデータによってバックアップされます。したがって、一方の行の変更を他方の行に反映させます。

可能な解決策は、そのテーブル行によって表されるデータのコピーを作成し、そのデータのコピーに基づいて新しい行を作成することです。そのコピーを作成する方法はデータに依存しますが、非常に素朴な実装ではクローンメソッドを使用することができます(Vectorのデータではなく、Vectorに含まれるデータの

+0

+1) clone()を実行します。 – trashgod

+0

ありがとう!データをコピーし、そのデータに基づいて挿入します。 – Tai

関連する問題