在我的 Java 8 应用程序中,我使用 aSwingWorker从数据库获取一些数据,并publish在知道整行数据后调用,然后将其添加到表中:
DefaultTableModel dtm123 = (DefaultTableModel) myTable.getModel();
@Override
protected void process(List<Integer> chunks) {
if(chunks!=null) {
ListIterator<Integer> li = chunks.listIterator();
while(li.hasNext()) {
dtm123.addRow(myDataList.get(li.next()).getRowArray());
}
}
}
dtm123.getRowCount()每次都会增加(我检查过),但表并未更新以实际显示新行。我尝试手动更新它,但也不起作用:
dtm123.fireTableRowsInserted(0, dtm123.getColumnCount()-1);
这是奇怪的事情:如果我使用完整版本,它就可以很好地填充表格:
((DefaultTableModel) myTable.getModel()).addRow(myDataList.get(li.next()).getRowArray());
您不能使用较短的版本来填充表格吗?dtm123没有在其他地方使用,那么这两个版本有什么区别?
编辑:
像这样直接填充它(不带SwingWorker)可以工作:
myTable.setModel(new DefaultTableModel(
new Object[][] {},
new Object[] {"blaA","blaB","blaC"}
));
DefaultTableModel dtm123 = (DefaultTableModel) myTable.getModel();
dtm123.addRow(new String[] {"bla1A","bla1B","bla1C"});
dtm123.addRow(new String[] {"bla2A","bla2B","bla2C"});
dtm123.addRow(new String[] {"bla3A","bla3B","bla3C"});
dtm123.addRow(new String[] {"bla4A","bla4B","bla4C"});
dtm123.addRow(new String[] {"bla5A","bla5B","bla5C"});
dtm123.addRow(new String[] {"bla6A","bla6B","bla6C"});
dtm123.addRow(new String[] {"bla7A","bla7B","bla7C"});
看起来这SwingWoker就是问题所在,但为什么呢?process正在主线程上运行,必须用于 UI 更新,并且没有异常或错误消息。
一只名叫tom的猫
相关分类