当你使用JList
时,不可避免从ListModel
中增删数据,每次修改ListModel
,JList
会自动刷新,刷新过程很快,你几乎看不到元素一个一个加进去的过程,而是啪的一下很快啊!
但是,当你选中JList
中第一行的数据再去修改ListModel
时,会发现刷新出奇的慢,你能清晰地看到数据一行一行慢慢增加;而奇怪的是,当你选中第2,3,4等其他行时,即使你有上万条数据,都是啪一下就出来了。
swing
的JList
就是有这样一个bug
,如何解决呢,我尝试过更新数据之前先清除选中,但无济于事
list.clearSelection();
于是我想了另一个办法:先定义一个空的ListModel
// 空 ListModel,用于其他 ListModel 的 clear 时暂时显示,防止卡顿
private DefaultListModel emptyListModel = new DefaultListModel<>();
在Jlist
正在使用的ListModel
需要增删数据之前,暂时设置成这个空的ListModel
,原来的ListModel
修改数据完成之后设置回来,例如
list.setListModel(emptyListModel);
oringinalListModel.clear();
oringinalListModel.addElement(element);
list.setListModel(oringinalListModel);
最后成功解决,刷新数据再也不卡顿了!