gpt4 book ai didi

java - 从 JList 中删除项目

转载 作者:行者123 更新时间:2023-12-02 03:48:24 25 4
gpt4 key购买 nike

我知道这个问题之前已经被问过,并且有很多线程我可以剪切和粘贴工作代码,但我的问题是为什么我下面的代码不起作用。我试图从 JList 中删除多个项目,但是当我运行以下代码时,出现越界异常。这是片段:

static DefaultListModel<File> listModel = new DefaultListModel<>();
JList<File> fileList = new JList<>(listModel);

void removeFiles() {
int[] listRange = new int[100];
listRange = fileList.getSelectedIndices();
int i = 0;
while (i <= listRange.length) {
listModel.remove(listRange[i]);
i++;
}
}

我已使用调试语句来确认 fileList 正在获取数据(即,如果我添加 4 个文件,其长度为 4),并且我还确认了 中的索引listRange 代表我要删除的文件的索引。但由于某种原因,它不会删除它们。我尝试从 fileList 以及模型 (listModel) 中删除,但都不起作用。我在这里忽略了什么吗?谢谢。

最佳答案

当您从列表中删除项目时,其大小将会减小。

例如,在包含 3 个项目的列表中,您想要删除索引 1 和 2 处的项目。当您删除第一个时,列表在索引 0 和 1 处只剩下 2 个项目。因此调用 list.remove(2) 将导致 outOfBoundException

一种可能的解决方案是使用迭代器并继续调用 next 直到到达要删除的索引之一并对其调用remove。或者只需将下一个要删除的索引减少已执行的删除次数

PS:仅当 getSelectedIndices 返回有序数组时才有效。否则,您必须自己订购索引

static DefaultListModel<File> listModel = new DefaultListModel<>();
JList<File> fileList = new JList<>(listModel);

void removeFiles() {
int[] listRange = new int[100];
listRange = fileList.getSelectedIndices();
int i = 0;
//The counter of the removed items so far
int nbOfRemovedItems = 0;

while (i <= listRange.length) {
// After each remove, the index of the items is decreased by one
listModel.remove(listRange[i] - nbOfRemovedItems);
++nbOfRemovedItems;
i++;
}
}

关于java - 从 JList 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com