0

これが問題です。JTableフレーム内に編集可能なデータを表示しています。新しい行を追加したり、古い行を削除したりできます。

ここで、いくつかのデータが入力されたテーブルから開始すると、正常に機能します。行を削除することができます。これにより、データから行も削除されますVector<Vector>。ただし、行を追加すると、その行はテーブルに表示されますが、変更はデータに反映されません。

Vector<Object> newQuestion = new Vector<Object>(3, 1);
newQuestion.add(question.getText());
newQuestion.add(answer.getText());
newQuestion.add(false);
model.addRow(newQuestion); // Update the model with new question

modelですDefaultTableModelmodel.fireTableDataChanged();DTMがそれ自体を起動したとしても、試しましたが、それも機能しませんでした。

ポインタはありますか?

編集:興味深いのは、テーブル内のデータから始めて行を追加すると、変更がデータにも反映されることです。

編集2https ://github.com/thekarangoel/YALT/blob/master/src/editDB.java 65行目から、行が追加されます。試すには、コンパイル、実行、ファイル>新しいデータベースの追加。名前を付けます。新しい行を追加します。

編集3:このコードの場合:System.out.println( "Data:" + data); Vector> modelData = model.getDataVector(); System.out.println( "データ:" + modelData);

私はこれを手に入れます:

Data: null
Data: [[w, a, false]]

私のベクターからの最初のifデータ。2つ目は、`modelのVectorのデータです。なぜこうなった?既存のテーブルに何かを追加すると、ファイル行にも変更が表示されます。

4

1 に答える 1

2

データの作成方法を見てください。

public Vector<Vector<Object>> convertMapToVector(Map<String, String> quesToAnsMap) {
    if (quesToAnsMap.size() > 0) {
        // the data field is initialized here
        data = new Vector<Vector<Object>>(quesToAnsMap.size(), 1); 
        ...
        return data;
    }
    // but not here
    return new Vector<Vector<Object>>();
}

コードをより堅牢にするための私のアドバイス:

  • dataフィールドを使用しないでください。データはすでにモデルに含まれているため、役に立ちません。したがって、データを取得するには、モデルからデータを取得する必要があります。
  • すべてのメソッドに引数と戻り値を取得させるか、何も取得せずにvoidを返し、フィールドを初期化するかのいずれかですが、両方を混在させると混乱します。上記のメソッドはフィールドを初期化して返しますが、else句は初期化せずにフィールドを返すだけです。
于 2013-03-24T18:41:04.527 に答える