我有一个 JList,其中包含一些允许多重选择的元素。在将这些元素添加到 JList 之前,有关它们的一些信息将存储在单独类的静态 HashMap 中。当选择超过 1 个项目并按下“删除所选”按钮时,我尝试删除所选项目(效果很好),并从 HashMap 中删除它们的记录。但出于某种原因,如果我选择超过 1 个元素,则仅删除 HashMap 中的第一条记录。我不明白这对于 JList 是如何工作的,但对于 HashMap 不起作用。我的代码如下:
remove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] selectedElementsValues = jList.getSelectedValues();
for (int i = 0; i < selectedElementsValues.length; i++) {
System.out.println(jList.getSelectedValue().toString());
System.out.println(PersonClass.map.get(jList.getSelectedValue().toString()));
PersonClass.map.remove(jList.getSelectedValue().toString());
System.out.println(PersonClass.map);
}
如果我一次只选择一项并将其删除,效果很好。但不能进行多项选择。不过,JList 中的项目已正确删除,因此我不明白为什么它不能对 map 执行相同的操作。
谢谢
最佳答案
问题在于,当 jList
选择未修改时,从 map 中删除项目的循环使用 jList.getSelectedValue().toString()
。您可以使用之前获得的选择数组:
for (Object o : selectedValues) {
PersonClass.map.remove(o.toString());
}
请注意,getSelectedValues()
已弃用,您应该使用 getSelectedValuesList()
。
关于java - 从 JList 中删除多个选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22557446/