繁体   English   中英

从JList删除元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM