【发布时间】:2013-08-22 19:08:01
【问题描述】:
这是我正在尝试做的简化版本。我有一个将整数 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 事件来做到这一点?属性更改事件?如果有,怎么做?
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
标签: java swing list events defaulttablemodel