我有一个程序可以检查数据库中每一秒的新插入行,如果找到新记录,我必须清除listModel并再次从数据库中检索所有数据并在列表中重新显示。 / p>
itemListModel.clear();
ArrayList resultArrayList = DBQueries.getAllSubmittedSaleTransaction();
Iterator iterate = resultArrayList.iterator();
int i = 0;
while (iterate.hasNext()) {
Hashtable data = (Hashtable) iterate.next();
itemListModel.add(i, data);
this.itemList.addNotify();
this.itemList.validate();
this.itemList.repaint();
i++;
}
this.validate();
this.repaint();
但问题是,重绘方法有时有时不起作用。 有没有聪明的方法来实现这个目标?
提前致谢
答案 0 :(得分:4)
如果要更新模型,则不需要重新绘制JList,尤其是在模型在添加新数据后调用fireContentsChanged(...)
时。请务必仅在Swing事件线程中更改模型。
考虑一下
SwingWorker.StateValue.DONE
时,让GUI从SwingWorker获取新数据并在EDT上填充ListModel fireContentChanged(...)
方法。 fireContent....()
方法,因为DefaultListModel会为您执行此操作。