从JList中删除元素

时间:2015-02-27 12:50:44

标签: java

我有一个JList,我从MySQL数据库填充。这工作正常,我可以在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超出界限。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您的代码正在从列表中删除元素(在每次迭代中,列表的大小减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)来避免这种情况。

答案 1 :(得分:2)

您可以在没有while循环的情况下执行此操作:

DefaultListModel listModel = (DefaultListModel) yourJList.getModel();
listModel.removeAllElements();

答案 2 :(得分:0)

覆盖列表中的数据会更快....

list.setListData(new String[0])