1

私はこの回答を使用してGUIにボタンを動的に追加し、それらもすべて削除できると期待していました。私の理解では、HashMap(文字列)内のすべてのキーを取得してから、キーに対してforループを実行し、ハッシュマップからキーを削除しています(削除するオブジェクトを元に戻します)。問題は、ハッシュマップから最初のボタンを削除した後、ループが続行されず、アプリケーションがクラッシュすることです。

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
4

2 に答える 2

1

HashMap から削除する場合は、イテレータを使用して削除する必要があります。Java の foreach ループで remove を呼び出す を
参照してください。

編集: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);
于 2013-03-22T15:26:32.753 に答える
0

推測です。Hashmap からボタンを削除しても、UI に残っていて、参照がなくなっている可能性があります。多分それは1つの問題です。スニピットの UI からボタンを削除するように処理する必要があるコメント行が表示されます。それを実行させてから何が起こるかを確認する必要があると思います。

于 2013-03-22T15:20:28.273 に答える