在 JList 中删除和添加大量项目

Removing And Adding Tons of Items In JList

目的是将所选项目从左向右移动,反之亦然。
少量项目工作正常,但是一旦处理超过 20k 的许多项目,它就会变得很慢。

DefaultListModel<String> fromModel = (DefaultListModel<String>) fromJList.getModel();
DefaultListModel<String> toModel = (DefaultListModel<String>) toJList.getModel();

int selectedIndex;
while ((selectedIndex = fromJList.getSelectedIndex()) != -1)
{
     String itemToRemove = fromModel.remove(selectedIndex);
     fromList.remove(itemToRemove);
     toList.add(itemToRemove);
     toModel.addElement(itemToRemove);
}

DefaultListModel 的实现不是这种工作的最佳选择。 而且 adding/removing 一个接一个也不是很有效,因为它会在每次调用时触发刷新事件。

最好是通过扩展 AbstractListModel 创建您自己的 ListModel。

https://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractListModel.html

想法是进行所有更新,add/remove 项,然后调用 fireContentsChanged