2016-08-22 68 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/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);