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 に答える