簡體   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