【发布时间】:2012-08-22 13:49:52
【问题描述】:
我正在使用 SwingWorker 使用此处建议的方法通过自定义 TableModel 将数据库中的数据加载到我的 JTable 中:How to fill data in a JTable with database?。如果我在继续处理 SwingWorker 中的 ResultSet 之前绑定我的 TableModel,我最终会在表模型中得到一个空列表,并且 JTable 会抱怨。如果我在调用 SwingWorker 后绑定模型,我的 JTable 会错过一些由 publish 方法触发的回调以更新表中的行。这是我的代码的样子:
class MyTableModel{
ResultSet rs;
//Row is an intenral row object that is obtained after processing resultset
List<Row> data
MyTableModel(){
//initalise the row, rs etc;
}
public void updateData(List<Row> r){
data.addAll(r);
}
//called as a callback by another class that manages the queries
public void processResults(ResultSet rs){
new SwingWorker<Void,Row>(){
doInBackground(){
//process row by row
publish(row);
}
public void process(List<Row> chunks){
updateData(chunks);
fireTableDataChanged();
}
}.execute();
}
}
这就是我现在设置表格模型的方式
MyTableModel m = new MyTableModel();
//pass m as callback to the database manager which invokes processResults() on m
dbm.makeQuery("SELECT bit,pat from bot;",m);
table.setModel(m);
【问题讨论】:
-
“和 JTable 抱怨”...关于什么??
-
好吧,它无法从支持模型的列表中获取任何值,因为该列表目前为空。
标签: java swing jdbc jtable swingworker