如果选中某个JCheckBox,我怎么能删除它?

时间:2016-08-22 11:29:51

标签: java swing

我正在为我的Checkbox使用 Arraylist 。我希望一旦选中就删除每个,但我的代码并未执行预期的行为。我不知道为什么我的代码不起作用。

这是:

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();
    }

}

2 个答案:

答案 0 :(得分:2)

正如其他人在评论部分指出的那样,您不应删除ArrayList的项目,因为您无法获得预期的结果。

您应该使用Iterator代替。

示例:

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

答案 1 :(得分:0)

使用现代Collection API。

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

或使用方法参考。

SBName.removeIf(JCheckBox::isSelected);