java - 循环遍历 jList 索引以删除项目

标签 java jlist selected indices

我尝试循环遍历 jList 中所选项目的索引以删除它们。

int[] indexoptio;
    indexoptio = this.list_optio.getSelectedIndices();

    for (int i=0; i<indexoptio.length ; i++) {
        this.optio.remove(indexoptio[i]);}
    this.list_optio.setModel(optio);

它工作完美,除非我的列表中只有 2 项。当我选择这两项时,它只会删除其中一项...

最佳答案

这是因为在处理引用数据结构的一组未更改的索引时更改了数据结构。使用示例更容易显示这一点。假设您有一个包含 3 个元素的列表 items:

["item1", "item2", "item3"]

并且您想要删除第 1 项和第 3 项,请使用上面实际执行的代码:

items.remove(0);
items.remove(2);

第一次删除后,列表变成了这样:

["item2", "item3"]

看看“item3”现在是在位置1,而之前是在位置2吗?

您选定的索引列表引用原始数据列表,但在第一个删除列表发生更改之后。

我认为以下内容应该适合您:

int[] indexoptio;
indexoptio = this.list_optio.getSelectedIndices();

for (int i=0 ; i<indexoptio.length ; i++) {
    this.optio.remove(indexoptio[i]-i);
}
this.list_optio.setModel(optio);

每次迭代,原始列表的大小都会减少 1,并且一些元素已下移,因此通过减去循环计数器 (indexoptio[i]-i),它应该保持值同步

关于java - 循环遍历 jList 索引以删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838197/

相关文章:

java - 如何在 java 中将 .TIF 图像设置为 ImageIcon?

Java:从列表选择监听器获取结果

javascript - 修改此函数以显示所有选中的复选框的值(而不是最后选择的)

colors - 选中时如何更改 JavaFX TableCell 颜色?

java - "do while"出现问题

java - Jongo 更新查询不起作用

java - 正确命名 Java Google App Engine 项目的方法

java - 将2位数字变成3位数字并将其反转

java - 如何更改JList java中的描述图像

Jquery 在下拉菜单上添加 "selected"