有没有办法从当前位置删除复选框?
例如
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。该组件变得不可见。您实际上必须将其从面板中删除,然后再对其进行更新。