Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除和添加JList中的大量项目_Java_Swing_Jlist - Fatal编程技术网

Java 删除和添加JList中的大量项目

Java 删除和添加JList中的大量项目,java,swing,jlist,Java,Swing,Jlist,其目的是将所选项目从左向右移动,反之亦然。 很少的项目可以很好地工作,但是一旦它处理了很多项目,比如超过20k的项目,它就会变得很慢 DefaultListModel<String> fromModel = (DefaultListModel<String>) fromJList.getModel(); DefaultListModel<String> toModel = (DefaultListModel<String>) toJList.get

其目的是将所选项目从左向右移动,反之亦然。
很少的项目可以很好地工作,但是一旦它处理了很多项目,比如超过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 fromModel=(DefaultListModel)fromJList.getModel();
DefaultListModel toModel=(DefaultListModel)toJList.getModel();
int-selectedIndex;
而((selectedIndex=fromJList.getSelectedIndex())!=-1)
{
String itemToRemove=fromModel.remove(selectedIndex);
fromList.remove(itemtoreve);
toList.add(itemToRemove);
toModel.addElement(itemToRemove);
}

DefaultListModel的实现并不适合这种工作。 而且逐个添加/删除也不是很有效,因为它会在每次调用时触发刷新事件

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

我们的想法是完成所有更新,添加/删除项目,然后调用fireContentsChanged