这很有趣,删除多个项目,我无法找出如何在一个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