1

これは、私がやろうとしていることの単純化されたバージョンです。整数 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();

私の質問は次のとおりです。

  1. これは、テーブル内のデータを更新/保存する正しい方法ですか?
  2. getList はデータのクローンを返す必要がありますか? 参照を返すだけでは、データベースからのすべての更新が同じ参照にアクセスし、これらの更新が EDT で実行されていないため、それは悪い/眉をひそめている/間違っているのではないでしょうか?
  3. Javaイベントを使用してこれを行うにはどうすればよいですか? プロパティ変更イベント? もしそうなら、どのように?
4

1 に答える 1