これは、私がやろうとしていることの単純化されたバージョンです。整数 ID を文字列のリストにマップするマップがあります。マップからのこれらのリストの 1 つが、常に JTable によって表示されます。(どの ID を表示する必要があるかによって異なります) マップのすべての情報はデータベースから取得され、常に追加および削除されます。完全なマップを保存し、データベースから更新を受け取る My DataClass:
DataClass {
Map(Integer, List<String>) map;
// TabelModel gets list here
public List<String> getList(int id) {
return map.get(id);
}
// Updates from database come here
public updateList(int id, String info) {
if (map.containsKey(id) {
map.get(id).add(info);
}
else {
map.put(id, new List<String>(info));
}
}
// Remove from list, etc all down here
...
}
私のテーブルモデルクラス:
MyTableModel extends DefaultTableModel {
List data;
public void updateData(int id) {
data = getList(id)
fireTableDataChanged();
}
... All the other stuff needed ...
}
データベースの更新はバッチで行われるため、バッチの最後にテーブルを更新する必要があることがわかっています。したがって、DataClass は、更新するテーブルを通知する UI クラスに通知します。これによりupdateData(id)
、 DataClass から新しいデータ セットを取得して を呼び出す が呼び出されます。fireTableDataChanged();
私の質問は次のとおりです。
- これは、テーブル内のデータを更新/保存する正しい方法ですか?
- getList はデータのクローンを返す必要がありますか? 参照を返すだけでは、データベースからのすべての更新が同じ参照にアクセスし、これらの更新が EDT で実行されていないため、それは悪い/眉をひそめている/間違っているのではないでしょうか?
- Javaイベントを使用してこれを行うにはどうすればよいですか? プロパティ変更イベント? もしそうなら、どのように?