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)以設置它們(當然,在添加行之前)。
添加回答
舉報