在 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
目的是将所选项目从左向右移动,反之亦然。
少量项目工作正常,但是一旦处理超过 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