Я использовал этот answer, чтобы динамически добавлять кнопки в мой графический интерфейс и, как ожидается, также сможет удалить все из них. Насколько я понимаю, я получаю все ключи в HashMap (строки), а затем я делаю цикл for над ключами и удаляю их из 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
Если набор ключей связан с HashMap вы, вероятно, получите исключение ConcurrentModification. В этом случае просто скопируйте набор и выполните итерацию по скопированному набору. – Paranaix