Это упрощенная версия того, что я пытаюсь сделать. У меня есть карта, которая отображает целочисленный идентификатор в список строк. Один из этих списков с карты всегда отображается JTable. (В зависимости от того, какой идентификатор должен отображаться) Вся информация для карты поступает из базы данных и постоянно добавляется и удаляется. Мои DATACLASS, которая хранит всю карту и получает обновления из базы данных:Java: Правильный способ обновления данных TableModel?
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 сообщает классу пользовательского интерфейса, который информирует таблицу для обновления. Это приводит к тому, updateData(id)
называться который возвращает новый набор данных из DATACLASS и называет fireTableDataChanged();
Мой вопрос являются:
- Является ли это правильный путь идти об обновлении/хранения данных в таблице ?
- Должен ли getList возвращать клон данных? Если я просто верну ссылку, все обновления из базы данных будут обращаться к той же ссылке, и поскольку эти обновления не будут работать в EDT, это не будет плохо/нахмуриться/неправильно?
- Как это сделать с помощью событий Java? PropertyChangeEvent? Если да, то как? не
Для более эффективной помощи следует отправить сообщение [SSCCE] (http://sscce.org/). –