這很有趣,刪除多個項目,我無法找出如何在一個JList如何JList中
幫助刪除多項選擇,請
UPD: OK,問題出在NetBeans上,因爲它創建了JList並設置了AbstractListModel
模式,這種模式在某種程度上不適用於remove方法。
這很有趣,刪除多個項目,我無法找出如何在一個JList如何JList中
幫助刪除多項選擇,請
UPD: OK,問題出在NetBeans上,因爲它創建了JList並設置了AbstractListModel
模式,這種模式在某種程度上不適用於remove方法。
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]);
}
}
我發現實現上述答案的關鍵是你需要使用['JList(ListModel
public int[] getSelectedIndices()
其中foo
是將JList:
int[] selected = foo.getSelectedIndices();
for(int i : selected){
foo.remove(i);
}
這不起作用) – VextoR
我的解決辦法:
DefaultListModel dlm = (DefaultListModel) lst.getModel();
int count = lst.getSelectedIndices().length;
for (int i = 0; i < count; i++)
{
dlm.removeElementAt(lst.getSelectedIndex());
}
我碰到這個問題也來了。 所有發佈的解決方案對我來說都不起作用,因爲如果我調用DefaultListModel#remove(int),它將修改底層列表,因此我使用JList#getSelectedIndices()收集的索引不再有效。
我來到這個解決方案,它爲我工作。
for (MyObject o : jList1.getSelectedValuesList())
{
((DefaultListModel<MyObject>)jList1.getModel()).removeElement(o);
}
通過處理選定的對象,我不必關心索引及其有效性。
如果從所選列表的最後/最後開始,則應該能夠通過索引刪除項目,而不會觸及ArrayIndexOutOfBounds異常......即使每次刪除後基礎列表都保持更改,如果你從後面開始,列表不會改變.. –
很有趣的是,你沒看JList中的javadoc :-) http://download.oracle.com/javase/7/docs/api/javax/swing/JList.html#getSelectedIndices() –
@ StephenC這很有趣,因爲NetBeans創建了AbstractListModel和foo.remove(i);在這種情況下不工作。 – VextoR
@StephenC很高興我今天讓你更幸福:) – VextoR