Añadir y eliminar JButton

Lorena
06 de Abril del 2006
Hola, estoy haciendo un applet muy simple con dos botones, uno que añade botones y el otro que debe eliminar los botones añadidos.

La estructura del programa es la que sigue y no se puede modificar, debe ser a través del manejo del paint y del método anadirboton como se añadan. El problema es que al pulsar mostrarini no añade, el que los añade es el que los tenía que borrar y además inicialmente aunque pasa por el paint la primera vez no se añade ningún botón.

Necesito ayuda urgente porque llevo mucho tiempo intentandolo y no encuentro la solución. Mchas gracias por todo, aquí os dejo el código:

public class Applet1 extends Applet {
//boton de calendario que me va a eliminar los botones viejos del panel sin hacer repaint
JButton mostrarini;
//botón actualizar que me va a poner los nuevos botones
JButton actualizar;
//botones que voy a ir añadiendo
JButton boton;
//vector que va a guardar los botones creados con el paint viejos
Vector botonesviejos;

private boolean isStandalone = false;
//Obtener el valor de un parámetro
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

//Construir el applet
public Applet1() {
}
//Inicializar el applet
public void init() {
mostrarini=new JButton("Borro los botones viejos");
mostrarini.setBackground(Color.red);
actualizar=new JButton("Pinto los botones nuevos");
actualizar.setBackground(Color.GREEN);
this.add(mostrarini);
this.add(actualizar);
//añado el evento al boton mostrarini
mostrarini.addActionListener(new Applet1_mostrarini_actionAdapter(this));
//añado el evento al boton actualizar
actualizar.addActionListener(new Applet1_actualizar_actionAdapter(this));
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//recojo el evento de mostrarini que debe borrar los botones viejos
public void mostrarini_actionPerformed(ActionEvent e){
System.out.println("EL VECTOR BOTONES EN MOSTRARINI TIENE: "+botonesviejos.size());
for(int i=0; i<botonesviejos.size();i++){
JButton nuevoboton = (JButton) botonesviejos.elementAt(i);
this.remove(nuevoboton);
}
this.validate();
this.repaint();
}
//recojo el evento de actualizar que debe poner los botones nuevos
public void actualizar_actionPerformed(ActionEvent e){
System.out.println("ENTRO EN ACTUALIZAR");
//llamo al paint para que vuelva a añadir uno nuevo
this.repaint();
}

public void paint(Graphics g) {
System.out.println("ENTRO EN EL PAINT");
//vuelvo a crear el vector
botonesviejos=new Vector();
//creo el boton que voy a pasar al método
boton=new JButton();
//llamo a añadir botón que añade los botones nuevos
//si he entrado en borrar no llames a añadir
anadirboton(boton,100,200);
}

//método que añade los botones al que se llama desde el paint
public void anadirboton(JButton boton,int x,int y){
System.out.println("ENTRO EN ANADIR BOTON");
//guardo los botones que se le pasan en el vector
botonesviejos.add(boton);
//añado los botones al applet
boton=new JButton("Soy del paint");
boton.reshape(x,y,30,30);
this.add(boton);
}
//Inicialización de componentes
private void jbInit() throws Exception {
}
//Obtener información del applet
public String getAppletInfo() {
return "Información del applet";
}
//Obtener información del parámetro
public String[][] getParameterInfo() {
return null;
}
}

//defino la clase que maneja el evento del botón mostrarini
class Applet1_mostrarini_actionAdapter implements java.awt.event.ActionListener {
Applet1 adaptee;

Applet1_mostrarini_actionAdapter(Applet1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.mostrarini_actionPerformed(e);
}
}
//defino la clase que maneja el evento del botón actualizar
class Applet1_actualizar_actionAdapter implements java.awt.event.ActionListener {
Applet1 adaptee;

Applet1_actualizar_actionAdapter(Applet1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.actualizar_actionPerformed(e);
}
}