首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JCheckbox未正确删除

JCheckbox未正确删除
EN

Stack Overflow用户
提问于 2014-08-15 16:30:48
回答 2查看 72关注 0票数 2

今天早上我问了一个关于JCheckbox的问题,但是有人告诉我缩小问题的范围。经过几次调试,我把范围缩小到了问题上,但仍然无法解决。

如果我选择了一个JCheckbox和另一个不是后续的JCheckbox,那么两者都将被删除。(例如,如果我在0和2或3位置选择JCheckbox,则两者都将被删除)。

但是,如果我选择一个JCheckbox,然后选择后续的JCheckbox,它将只删除第一个JCheckbox。(例如,如果我在位置0和1处选择了JCheckbox,那么只有位置0的JCheckbox才会被删除)。

我怎样才能解决这个问题?

代码语言:javascript
复制
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class CheckBoxTest extends JPanel {

    JButton deleteBtn = new JButton("Delete!");
    List<JCheckBox> checkboxes = new ArrayList<JCheckBox>();

    public CheckBoxTest() {
        setLayout(new GridLayout(0, 1));
        for(int i = 0; i < 4; i++) {
            checkboxes.add(new JCheckBox());
            checkboxes.get(i).setText("text" + i);
            add(checkboxes.get(i));
        }
        add(deleteBtn);
        deleteBtn.addActionListener(new DeleteBtnActionPerformed());
    }

    public class DeleteBtnActionPerformed implements ActionListener {   

        @Override
        public void actionPerformed(ActionEvent e) {
            for(int i = 0; i < checkboxes.size(); i++) {
                if(checkboxes.get(i).isSelected()) {
                    System.out.println(checkboxes.get(i).getText() + " was deleted");
                    checkboxes.remove(i);       
                }
            }   
        } 
    }

    public static void main(String[]args) { 
        JFrame frame = new JFrame();
        frame.add(new CheckBoxTest());
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setSize(400,250);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 16:39:07

使用Iterator循环您的复选框并同时删除一个元素。对于这样的用例来说,这是一个很好的实践。

代码语言:javascript
复制
for(Iterator<JCheckBox> iterator = checkboxes.iterator(); iterator.hasNext();) {
    JCheckBox checkbox = iterator.next();
    if (checkbox.isSelected()) {
        System.out.println(checkbox.getText()
                + " was deleted");
        iterator.remove();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2014-08-15 16:34:20

代码语言:javascript
复制
checkboxes.remove(i);       
--i;

你忘了和右边的我待在一起了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25330361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档