0
for(JCheckBox currentCheckBox : imagesToBeImportedCheckBox){ 
    if(currentCheckBox.isSelected()){
                    System.out.println("The text Box selected for removing are"+currentCheckBox.getText());
                }

             }
            for(JCheckBox currentCheckBox : imagesToBeImportedCheckBox){

                if(currentCheckBox.isSelected()){
                    System.out.println("I am entering in the loop where this image has to be removed "+currentCheckBox.getText());
                    imagesToBeImported.remove(currentCheckBox.getText());

                }

             }
            for(ResourceListObject currentImage : imagesToBeImported){

                System.out.println("After removing the images left are "+currentImage.getName());

             }

そしてここに出力があります

削除するために選択されたテキスト ボックスは aix71b です

削除するために選択されたテキスト ボックスは Migration-image です

このイメージを削除する必要があるループに入ります aix71b

このイメージを削除する必要があるループに入ります

画像を削除した後、残っているのは aix71b です

イメージを削除した後、残っているのは Migration-image です

4

2 に答える 2

5

コードを見ると、おそらくこれが問題です。

imagesToBeImported.remove(currentCheckBox.getText());

これは、 Collection から名前付きの a String( getText()はここで String と言うように促しました) を削除しようとしますが、 Collectionには type の要素が含まれています。aix71bimagesToBeImportedimagesToBeImportedResourceListObject

そのため、コレクションから何も削除されず、同じタイプではありませんStringResourceListObject

編集:- (以下の 2 つの方法でリストから削除できます)

equalsの各要素に対して( iteratorimagesToBeImportedを使用して) をトラバースし、equalsから要素を削除できます。imagesToBeImportedCheckBoximagesToBeImportedresourceListObjectElement.getName()currentCheckBox.getText()

または、そのフィールドに基づいてそのequalsメソッドをオーバーライドして、このようなことを行ってからそれを削除することができます。ResourceListObjectnameimagesToBeImported

imagesToBeImported.remove(new ResourceListObject(currentCheckBox.getText()));
// You need to add another constructor in your ResourceListObject class which takes in only the name field as the parameter.
于 2013-09-25T04:46:34.987 に答える
0

問題は、currentCheckBox.getText()currentImage.getName()がまったく同じオブジェクトequalsではないことです。値が同じであっても、メソッドはそれらに当てはまりません。

于 2013-09-25T04:47:02.043 に答える