Foros del Web » Programación para mayores de 30 ;) » Java »

Pasar de un panel a otro con CardLayout

Estas en el tema de Pasar de un panel a otro con CardLayout en el foro de Java en Foros del Web. Hola a todos. Tengo el siguiente problema: Resulta que estoy haciendo una aplicación con bastantes formularios y cada panel es un cardLayout, de tal forma ...
  #1 (permalink)  
Antiguo 26/06/2008, 23:39
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Exclamación Pasar de un panel a otro con CardLayout

Hola a todos. Tengo el siguiente problema:

Resulta que estoy haciendo una aplicación con bastantes formularios y cada panel es un cardLayout, de tal forma que en función de la opción que se elija en el menú, se irá a un panel o a otro.

El problema es que en uno de esos paneles no puedo eliminar los datos de las etiquetas, combos, etc. Es decir, yo elijo la opción del menú que me lleva a ese panel y hago lo que tenga que hacer. Esto hará que se ponga texto en las etiquetas, cambien las pripiedades de los botones, etc. Pues bien, hay veces que si sales de ese panel, vas a otro y luego vuelves, se deberían mantener los datos; pero otras veces debería de ser un panel nuevo, sin datos. Y no consigo que se eliminen los datos. Siempre me salen los datos de cuando modifiqué la 1ª vez el panel (antes de cambiar a otro panel y volver).

La verdad es que no lo entiendo porque cuando se tiene que resetear el panel llamo al constructor de la clase, por lo que todos los componentes se inicializan de nuevo.

Pongo un poco de código de las clases implicadas:

*****

Esta es la clase donde se inicializa el panel problemático:

public class EscuchadorMenuVerPlanificacion extends javax.swing.JFrame implements ActionListener,ItemListener,TableModelListener,Pro pertyChangeListener{

........declaración de variables

public EscuchadorMenuVerPlanificacion(){ ////inicialización de todas las variables}

//cuando se pulsa en el menú Ver --> Planificación se viene directamente a este punto y

//entraría en el primer "if"

public void actionPerformed(java.awt.event.ActionEvent ae){
if(ae.getSource() == CrearMenu.verPlanificacion){
verPlanificacionActionPerformed(ae);
ae.setSource(new Object());
}
else if(ae.getSource() == ......

else if(ae.getSource() == ......

}

//con este método reseteo el panel

public void resetearPanelPresupuesto(ActionEvent ae){

new EscuchadorMenuVerPlanificacion();

}



******

Esta es otra clase desde la que se llama al metodo reset para que resetee el panel anterior

******

new EscuchadorMenuVerPlanificacion().resetearPanelPres upuesto(ae);



**************************************

El funcionamiento es más o menos el siguiente: desde el menú me voy al panel de Planificación, hago las operaciones. Desde el menú nuevamente me voy a otra pantalla y hago lo que tenga que hacer; y ahora quiero volver al panel de planificación. Para ello voy nuevamente al menú y le doy a Ver planificación; entonces en vez de mostrarme el panel limpio me muestra los datos de la vez anterior.



¿Qué estoy haciendo mal?? Agradezco cualquier sugerencia porque me urge mucho.

Muchas gracias
  #2 (permalink)  
Antiguo 28/06/2008, 04:04
Avatar de julianchoss  
Fecha de Ingreso: julio-2006
Ubicación: Armenia
Mensajes: 26
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Pasar de un panel a otro con CardLayout

Hola. Te estas complicando un poco.
No deberías tratar de llamar nuevamente al constructor del panel, te sería más facil que en la clase Panel donde tienes los componentes implementaras un método reset, el cual te limpie todos los campos de texto, reestablesca los comboBox y demás componentes.
Luego, cuando hagas el cambio de layout y tengas q mostrar ese Panel, tan solo llames a ese reset, y listo.

Supongo que si estas usando un CardLayout, en algun momento debes invocar al método show, en el cual le indicas cual panel cargar. es en ese punto donde debes preguntar cual panel es invocado por el usuario, y según eso, llamas o no al metodo reset de tu panel.

Además esto es más óptimo ya q no carga la aplicacion volviendo a crear otro objeto nuevo de tu panel, además que te ahorrará futuros dolores de cabeza al tener una unica referencia de tu panel.
  #3 (permalink)  
Antiguo 04/07/2008, 04:49
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Pasar de un panel a otro con CardLayout

Hola:

He estado mirando a ver cómo lo podía hacer y he hecho lo siguiente:

En la clase donde se define el panel problemático he hecho:

Código:
 public void resetearPanelPresupuesto(ActionEvent ae){
        etiquetaPlanTrabajoElegido.setText("");
        etiquetaPresupuestoElegido.setText("");
        botonVerOtroPresupuesto.setEnabled(false);
        while(modeloTablaPresupuesto.getRowCount() > 0){
            modeloTablaPresupuesto.
         }
         modeloTablaPresupuesto.setColumnCount(2);
}
Ahora, cuando salgo de esta pantalla y voy a otra (por ejemplo abrir proyecto), se tiene que resetear la pantalla de planificación. Entonces en esta clase de AbirProyecto tengo el siguiente código:

Código:
public class EscuchadorMenuArchivoAbrir extends javax.swing.JFrame implements ActionListener{
    
    EscuchadorMenuVerPlanificacion escuchadorMenuVerPlanificacion;
    
    public EscuchadorMenuArchivoAbrir() {
        escuchadorMenuVerPlanificacion = new EscuchadorMenuVerPlanificacion();
    }

     botonAbrirActionPerformed(ae){
         escuchadorMenuVerPlanificacion.resetearPanelPresupuesto(ae);
     }
----
}
y cuando vuelvo a pulsar en el menú Ver--> Planificación vuelve a ir a la clanse de EscuchadorMenuVerPlanificacion.VerPlanificacionAct ionPerformed(ae).
En la clase donde creo el menú tengo el siguiente código:

Código:
public class CrearMenu {
    public CrearMenu(){
           escuchadorMenuVerPlanificacion = new EscuchadorMenuVerPlanificacion();
           //menu Ver
        verPlanificacion = new JMenuItem();
        verPlanificacion.setText("Planificación (*)");
        verPlanificacion.setMnemonic('P');
        verPlanificacion.setToolTipText("Ver la planificación del proyecto");
        menuVer.add(verPlanificacion);
        verPlanificacion.addActionListener(escuchadorMenuVerPlanificacion);
        ----------
    }
}
¿Alguna otra sugerencia? ¿Qué error estoy cometiendo?
Muchas gracias de nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:00.