Java容器删除方法无法正常工作

我hava添加1.TextArea 2.TextField然后我开始在容器上连续添加JButton …,现在通过使用JRadioButton我想使用此代码从容器中删除JButton

i=0; k=0; while(!birdButton[i].isSelected()){ i++; } System.out.println(i); k=i+2; list.removeElementAt(i); listName.removeElementAt(i); System.out.println(k); c.getContentPane().remove(k); 

但是当我选择第一个无线电按钮时,由于k = i + 2,应删除第一个JButton; 而不是删除这个删除TextArea(第一个)。 当我选择第3个radiobutton时,第1个JButton被删除。 任何人都可以让我知道问题是什么? 还有System.out.println(i); System.out.println(k); 没有打印任何值….这是代码

 public class RadioDemo implements ActionListener { String buttonName; JPanel radioPanel = new JPanel(); ButtonGroup group = new ButtonGroup(); Enumeration enl; int result; ActionEvent e; JRadioButton birdButton[]; int i, k; Vector listName; Vector list; Container c; public RadioDemo(Vector listName,Vector list,Container c) { birdButton=new JRadioButton[listName.size()]; this.listName=listName; this.c=c; this.list=list; i = 0; for (String buttonName : listName){ birdButton[i] = new JRadioButton(buttonName); birdButton[i].setActionCommand(buttonName); group.add(birdButton[i]); birdButton[i].addActionListener(this); radioPanel.add(birdButton[i]); i++; } birdButton[0].setSelected(true); radioPanel.setLayout(new BoxLayout (radioPanel,BoxLayout.Y_AXIS)); //birdButton.setBorder (BorderFactory.createEmptyBorder(5,5,5,5)); result = JOptionPane.showConfirmDialog(null, radioPanel, "Please choose", JOptionPane.OK_CANCEL_OPTION); show(); } /** Listens to the radio buttons. */ public void actionPerformed(ActionEvent e) { this.e = e; } public void show() { if (result == JOptionPane.OK_OPTION) { i = 0; k = 0; while (!birdButton[i].isSelected()) { i++; } System.out.println(i); k = i + 2; list.removeElementAt(i); listName.removeElementAt(i); System.out.println(k); c.getContentPane().remove(k); c.getContentPane().validate(); // System.out.println(e.getActionCommand()); // c.getContentPane().rePaint(); } } } 

默认情况下, getContentPane()返回的Container是由顶级容器 JFrame管理的JRootPanecontentPane 。 虽然“为方便起见, add方法及其变体, removesetLayout已被覆盖以根据需要转发到contentPane ”,但没有先验的方法来了解框架内部使用组件索引。

图片

相反,将您自己的JComponent添加到框架并对其进行操作; JPanel是一种常见的选择。

附录:还要考虑另一种布局,例如CardLayout ,如图所示。