有没有办法从当前位置删除复选框?

例如

1-我有四个复选框,一个,两个,三个和四个



2-如果我选择复选框2并按Delete键,则复选框2将被删除,我希望复选框3向上移动到复选框2的位置,复选框4向上移动到复选框3的位置。

现在,在我的代码中,将复选框“ 2”选中并按下“删除”按钮后,将复选框的可见性设置为false。


复选框2被选中并按下删除按钮后,我想要的输出。复选框3向上移动到复选框2的位置,复选框4向上移动到复选框3的位置。


我当前的代码

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CheckBoxTest {

        JPanel panel = new JPanel(new GridLayout(0, 1));
        JButton button = new JButton("Delete!");
        String[] names = {"One", "Three","Four"};
        JCheckBox[] checkboxes;
        JFrame frame = new JFrame();

    public CheckBoxTest() {
            checkboxes = new JCheckBox[3];
            for(int i = 0; i < names.length; i++) {
                    checkboxes[i] = new JCheckBox();
                    checkboxes[i].setText(names[i]);
                    panel.add(checkboxes[i]);
            }
            panel.add(button);
            frame.add(panel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(800, 600);
            frame.setVisible(true);
            button.addActionListener(new btnActionPerformed());
    }

    public class btnActionPerformed implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                    for(int i = 0; i < names.length; i++) {
                            if(checkboxes[i].isSelected()) {
                                    System.out.println(checkboxes[i].getText() + " is deleted");
                                    checkboxes[i].setVisible(false);
                            }
                    }
            }

    }

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

最佳答案

假设String[] names最初也包含值“ Two”,那么实际上您有4个按钮,您是否尝试过使用JPanel的remove()和updateUI()方法?尝试添加:

checkboxes[i].setVisible(false); // line you have in your code, now
panel.remove(checkboxes[i]);     // add this line
panel.updateUI();                // and this line


如果要从UI中删除某些内容,则不能仅将Visible设置为false;否则,不能将其设置为false。该组件变得不可见。您实际上必须将其从面板中删除,然后再对其进行更新。

07-25 22:05
查看更多