我使用此answer动态地向我的GUI添加按钮,并希望能够删除所有这些按钮。据我所知,我正在获取HashMap(字符串)中的所有键,然后我正在对键进行for循环,并从hashmap中删除它们(将对象取回,我将删除它)。问题是,从hashmap中删除第一个按钮后,循环不会继续,我的应用程序崩溃。
HashMap<String, JButton> buttonCache = new HashMap<>();
Set<String> names = buttonCache.keySet();
/*
* Checking which buttons exist in the hashmap
*/
for (String name0 : names) {
System.out.println("Name0: " + name0);
}
for (String name1 : names) {
System.out.println("before removing: " + name1);
buttonCache.containsKey(name1); //making sure its in it.
JButton b = buttonCache.remove(name1);
System.out.println("after removing: " + name1);
//visualUI.remove(b); //not tested yet
}
//visualUI.invalidate(); //not tested yet
//visualUI.repaint(); //not tested yet
输出结果为:
Name0: Cancel
Name0: Continue
2
before removing: Cancel
true
after removing: Cancel
答案 0 :(得分:1)
如果要从HashMap中删除,则需要在迭代器的帮助下删除 见Calling remove in foreach loop in Java。
编辑:根据OP ...
Iterator<String> it = names.iterator();
while(it.hasNext()) {
System.out.println(names);
String buttonName = it.next();
JButton b = buttonCache.get(buttonName);
it.remove();
}
System.out.println(names);
答案 1 :(得分:0)
只是一个猜测。当你从Hashmap中删除按钮时,它仍然可以在UI中找到并且不再有任何引用。也许这就是一个问题。我看到注释行应该注意从你的snippit UI中删除按钮 - 我想你应该让他们这样做,然后看看会发生什么。