Il metodo di rimozione del contenitore Java non funziona correttamente

ho aggiunto 1.TextArea 2.TextField quindi inizio ad aggiungere JButton successivamente al contenitore …, ora usando JRadioButton voglio rimuovere JButton dal contenitore usando questo codice

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

ma quando seleziono il 1 ° pulsante radio 1 JButton dovrebbe essere cancellato a causa di k = i + 2; invece di cancellare questo, cancella il TextArea (primo). quando seleziono il terzo pulsante radio, il 1 ° JButton viene cancellato. qualcuno può farmi sapere qual è il problema? e anche System.out.println(i); System.out.println(k); non sta stampando alcun valore …. ecco il codice

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

Il Container restituito da getContentPane() è, per impostazione predefinita, il contentPane di un JRootPane gestito dal contenitore di livello superiore , JFrame . Anche se “per comodità, il metodo add e le sue varianti, remove e setLayout sono stati sovrascritti per l’inoltro al contentPane come necessario,” non c’è un modo a priori per sapere sull’uso interno dei frame degli indici dei componenti.

Immagine

Invece, aggiungi il tuo JComponent al frame e fallo su di esso; JPanel è una scelta comune.

Addendum: considera anche un layout alternativo come CardLayout , qui illustrato.