java - 从 JList 中删除多个选择

标签 java swing hashmap selection jlist

我有一个 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/

相关文章:

c++ - std::unordered_map 中的键与散列

java - 使用 HashMap 通过迭代更新值来计算 map 是一种好习惯吗?

Java 不识别 Android XML 元素的 ID

java - UTF-8 适用于 Eclipse,但无法使用导出的 jar

java - 如何在我的 JFrame 中调整这些面板的大小?

Java - 使用 XStream 将 XML 转换为 HashMap - CannotResolveClassException : Response

java - 重新启动 linux 和 windows 的 java 应用程序

java - Hazelcasl Rest API 二进制对象

java - 为什么我的 GUI 没有显示?

Java Swing KeyBindings 仅在 Mac 上停止工作