Java 动态删除所有按钮
我用它动态地向GUI中添加按钮,并希望能够删除所有按钮。据我所知,我正在获取HashMap中的所有键(字符串),然后在键上执行for循环,并从HashMap中删除它们(获取我将删除的对象)。问题是从hashmap中删除第一个按钮后,循环不会继续,我的应用程序会崩溃Java 动态删除所有按钮,java,swing,Java,Swing,我用它动态地向GUI中添加按钮,并希望能够删除所有按钮。据我所知,我正在获取HashMap中的所有键(字符串),然后在键上执行for循环,并从HashMap中删除它们(获取我将删除的对象)。问题是从hashmap中删除第一个按钮后,循环不会继续,我的应用程序会崩溃 HashMap<String, JButton> buttonCache = new HashMap<>(); Set<String> names = buttonCache.keySet();
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
只是猜测而已。当您从Hashmap中删除按钮时,它可能仍然会在UI中找到,并且不再有任何引用。也许这是一个问题。我看到了一些注释行,它们应该注意从snippit的UI中删除按钮——我想你应该让它们这样做,然后看看会发生什么 只是一个猜测。当您从Hashmap中删除按钮时,它可能仍然会在UI中找到,并且不再有任何引用。也许这是一个问题。我看到了一些注释行,它们应该注意从snippit的UI中删除按钮——我想你应该让它们这样做,然后看看会发生什么 如果要从HashMap中删除,需要借助迭代器进行删除。
看 编辑:根据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);
Iterator it=names.Iterator();
而(it.hasNext()){
System.out.println(名称);
String buttonName=it.next();
JButton b=buttonCache.get(buttonName);
it.remove();
}
System.out.println(名称);
如果要从HashMap中删除,需要借助迭代器进行删除。看 编辑:根据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);
Iterator it=names.Iterator();
而(it.hasNext()){
System.out.println(名称);
String buttonName=it.next();
JButton b=buttonCache.get(buttonName);
it.remove();
}
System.out.println(名称);
如果键集链接到HashMap,则可能会出现ConcurrentModification异常。在这种情况下,只需复制集合并在复制的集合上迭代。如果键集链接到HashMap,则可能会出现ConcurrentModification异常。在本例中,只需复制集合并对复制的集合进行迭代,我只是尝试使用迭代器,得到了相同的结果。让我再试一次,并用代码确认。@Juan还尝试注释出visualUI.remove(b);线路。我不知道这是怎么回事,但这会告诉你你的问题是否在那里。也试着发布你得到的异常。好吧,我想通过一点洗牌,我成功地做到了。如果需要,可以将此代码添加到答案中:Iterator it=names.Iterator();while(it.hasNext()){System.out.println(名称);String buttonName=it.next();JButton b=buttonCache.get(buttonName);it.remove();}System.out.println(名称);我只是尝试了一个迭代器,得到了相同的结果。让我再试一次,并用代码确认。@Juan还尝试注释出visualUI.remove(b);线路。我不知道这是怎么回事,但这会告诉你你的问题是否在那里。也试着发布你得到的异常。好吧,我想通过一点洗牌,我成功地做到了。如果需要,可以将此代码添加到答案中:Iterator it=names.Iterator();while(it.hasNext()){System.out.println(名称);String buttonName=it.next();JButton b=buttonCache.get(buttonName);it.remove();}System.out.println(名称);