我有一个JList,其中包含一些允许多个选择的元素。在将这些元素添加到JList之前,有关它们的一些信息存储在单独的类中的静态HashMap中。当选择了多个项目并按下“删除选中”按钮时,我试图删除所选项目(工作正常)并从HashMap中删除它们的记录。但是出于某种原因,如果我选择多个元素,则只删除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中的项目会被正确删除,所以我不明白为什么它对地图不会这样做。
THX
答案 0 :(得分:2)
问题是,在未修改jList.getSelectedValue().toString()
选项时,从地图中删除项目的循环使用jList
。您可以使用之前获得的选择数组:
for (Object o : selectedValues) {
PersonClass.map.remove(o.toString());
}
请注意,getSelectedValues()
已弃用,您应该使用getSelectedValuesList()
。