[英]Delete elements from JList
我有一个从MySQL数据库填充的JList。 这样可以很好地工作,并且可以在JScrollPane中看到结果,但是,当我再次执行查询时,结果将添加到JList中。 因此,如果有10行数据,则在2次查询后会显示20行,每行都有一个副本。
我想在重新查询之前删除JList中的所有元素,以便仅显示其中的内容,而不显示重复的数据。
我有:
ArrayList<String> results;
JList list;
JScrollPane listScroller;
... //button event and arraylist population
for(int i=0; i < list.getModel().getSize(); i++){
list.remove(i)
}
list = new JList(results.toArray);
listScroller.setViewportView(list);
当我调试它时,甚至认为有50个元素,i在for循环中停在25,然后引发异常,说25超出范围。
有什么建议么?
您的代码正在从列表中删除元素(在每次迭代中,列表的大小都会减1)。 因此,当您达到i==25
,列表的大小为25,而当您尝试删除第25个元素时,您将超出列表范围。
试试这种方法:
while (list.getModel().getSize() > 0) {
list.remove(0);
}
由OP编辑:
循环中list.remove(i)
的问题在于,每次删除JList中的元素时都会填充索引。因此,如果i = 0
且有10个元素,则删除第一个元素,然后只有9个元素元素,它们从0到8进行索引。到i = 5
您只剩下5个元素,而4是顶部索引,因此会出现超出范围的异常。
通过每次删除第一个索引(0)来避免这种情况。
您可以在没有while循环的情况下执行此操作:
DefaultListModel listModel = (DefaultListModel) yourJList.getModel();
listModel.removeAllElements();
覆盖列表中的数据将更快。
list.setListData(new String[0])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.