1 回答
TA贡献1906条经验 获得超3个赞
修复了它 - 有两个原因导致它不起作用:
设置表的模型 (
myTable.setModel(new DefaultTableModel(...add info here...));
) 和创建列也必须在主/UI 线程上完成。process
在调用后看似随机的时间点被调用publish()
,并且无法事先知道将有多少块(可能只是其中一个或全部),因此您必须确保在设置DefaultTableModel
后获得列。publish()
为了保证这一点,要么在第一次调用之前设置列(但仍在外部doInBackground
- 请参阅 1.),要么调用publish
“第零次”时间来设置它们(请参阅下面的代码)。事后看来,这似乎很明显......
如果您像我一样使用SwingWorker
,您可以执行以下操作:
DefaultTableModel dtm123;
@Override
protected void process(List<Integer> chunks) {
if(chunks!=null) {
ListIterator<Integer> li = chunks.listIterator();
int next;
while(li.hasNext()) {
next = li.next();
if(next==-1) {
//Set up columns/column titles here
myTable.setModel(new DefaultTableModel(
new Object[][] {},
columnHeaderArray
));
dtm123 = (DefaultTableModel) myTable.getModel();
} else {
//Add new rows here
dtm123.addRow(myDataList.get(next).getRowArray());
}
}
}
}
像往常一样使用publish,但一旦您知道列的标题,请调用publish(-1)以设置它们(当然,在添加行之前)。
添加回答
举报