2011-10-06 66 views
4

這很有趣,刪除多個項目,我無法找出如何在一個JList如何JList中

幫助刪除多項選擇,請

enter image description here

UPD: OK,問題出在NetBeans上,因爲它創建了JList並設置了AbstractListModel模式,這種模式在某種程度上不適用於remove方法。

+0

很有趣的是,你沒看JList中的javadoc :-) http://download.oracle.com/javase/7/docs/api/javax/swing/JList.html#getSelectedIndices() –

+0

@ StephenC這很有趣,因爲NetBeans創建了AbstractListModel和foo.remove(i);在這種情況下不工作。 – VextoR

+0

@StephenC很高興我今天讓你更幸福:) – VextoR

回答

14
DefaultListModel dlm = (DefaultListModel) subjectList.getModel(); 

     if(this.subjectList.getSelectedIndices().length > 0) { 
      int[] selectedIndices = subjectList.getSelectedIndices(); 
      for (int i = selectedIndices.length-1; i >=0; i--) { 
       dlm.removeElementAt(selectedIndices[i]); 
      } 
    } 
+0

我發現實現上述答案的關鍵是你需要使用['JList(ListModel dataModel)'](http:/ /docs.oracle.com/javase/7/docs/api/javax/swing/JList.html#JList(javax.swing.ListModel))構造函數,否則您的模型是隻讀的。 – Catchwa

-1

其中foo是將JList:

int[] selected = foo.getSelectedIndices(); 
for(int i : selected){ 
    foo.remove(i); 
} 
+1

這不起作用) – VextoR

1

我的解決辦法:

DefaultListModel dlm = (DefaultListModel) lst.getModel(); 
int count = lst.getSelectedIndices().length; 

for (int i = 0; i < count; i++) 
{ 
    dlm.removeElementAt(lst.getSelectedIndex()); 
} 
2

我碰到這個問題也來了。 所有發佈的解決方案對我來說都不起作用,因爲如果我調用DefaultListModel#remove(int),它將修改底層列表,因此我使用JList#getSelectedIndices()收集的索引不再有效。

我來到這個解決方案,它爲我工作。

for (MyObject o : jList1.getSelectedValuesList()) 
{ 
    ((DefaultListModel<MyObject>)jList1.getModel()).removeElement(o); 
} 

通過處理選定的對象,我不必關心索引及其有效性。

+0

如果從所選列表的最後/最後開始,則應該能夠通過索引刪除項目,而不會觸及ArrayIndexOutOfBounds異常......即使每次刪除後基礎列表都保持更改,如果你從後面開始,列表不會改變.. –