2016-08-22 18 views
0

私は自分のチェックボックスにArraylistを使用しています。私はが選択されたらそれぞれを削除したいしかし、私のコードは期待された動作を実行していません。なぜ私のコードが動作していないのかわかりません。特定のJCheckBoxが選択されている場合、どのように削除できますか?

ここにある:

public class sampledsa extends JFrame implements ActionListener { 

    private JCheckBox CBname; 
    private ArrayList <JCheckBox> SBname = new ArrayList < >(); 
    private JButton BTok; 

    public sampledsa() { 
     setVisible(true); 
     setSize(500, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new GridLayout(6, 1)); 

     BTok = new JButton("OK"); 

     for (int i = 0; i < 5; i++) { 
      CBname = new JCheckBox("Checkbox" + (i + 1)); 
      SBname.add(CBname); 
      add(SBname.get(i)); 
     } 

     add(BTok); 
     BTok.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource().equals(BTok)) { 
      for (int i = 0; i < SBname.size(); i++) { 
       if (SBname.get(i).isSelected()) { 
        SBname.remove(i); 
       } 
      } 
      JFrame f = new JFrame(); 
      f.setVisible(true); 
      f.setSize(500, 400); 
      f.setDefaultCloseOperation(EXIT_ON_CLOSE); 
      for (int i = 0; i < SBname.size(); i++) { 
       f.add(SBname.get(i)); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     new sampledsa(); 
    } 

} 
+1

ちょっとしたヒント...クラスは大文字で始まり、変数は小文字で始まる必要があります。 – byxor

+0

私は 'ArrayList'は同時の変更をサポートしていないと思います。つまり、反復処理中は要素を削除できません。 –

+1

http://stackoverflow.com/jp/documentation/java/90/collections/2197/removing-items-from-a-list-within-a-loop#t=201608221144205738709 – rdonuk

答えて

2

他の人はあなたが期待する結果を得ることはありませんので、あなたがArrayListの項目を削除しないでくださいコメント欄で指摘したように。

代わりにIteratorを使用してください。

例:

Iterator<JCheckBox> iterator = sbname.iterator(); 
while(iterator.hasNext()) { 
    JCheckBox checkbox = iterator.next(); 
    if (checkbox.isSelected()) { 
     iterator.remove(); 
     //do some more stuff 
    } 
} 
+0

イテレータを使用する全体のポイントは、 "何かをする" - イテレータを使用して要素を削除しています。それ以外の場合は 'for'ループと変わりません。 – RealSkeptic

+0

@RealSkepticはそれを明確にするために追加しました - それは明らかだろうと思った - 私の悪い – mayha

0

は、近代的なコレクションAPIを使用してください。

SBName.removeIf(box->box.isSelected()); 

またはメソッドリファレンスを使用してください。

SBName.removeIf(JCheckBox::isSelected); 
関連する問題