单击按钮后删除复选框

时间:2014-08-13 16:57:11

标签: java swing

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

E.g

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

imageone

2 - 如果我选择复选框二并按删除按钮,复选框二将被删除,我想要复选框三向上移动到复选框两个位置和复选框四向上移动到复选框三个位置。

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

选中复选框2后,我想要的输出并按下删除按钮。复选框三向上移动到复选框两个位置和复选框四向上移动到复选框三个位置立即 imagethree

我当前的代码

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

1 个答案:

答案 0 :(得分:3)

假设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中删除某些内容,则不能将setVisible设置为false;组件变得不可见。你必须从面板中删除它,然后更新它。