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