我正在为我的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();
}
}
答案 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);