这是我正在尝试做的简化版本。我有一个将整数 id 映射到字符串列表的映射。地图中的这些列表之一始终由 JTable 显示。(取决于需要显示的 id)地图的所有信息都来自数据库,并且不断地被添加和删除。我的 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 事件做到这一点?属性更改事件?如果是这样,怎么做?