Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/10/2010, 15:25
Avatar de juamd
juamd
 
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 2 meses
Puntos: 8
Respuesta: Duda con JPanels en JFrame

Creas un frame, dentro agregas un panel y dentro de ese panel un scrollpane, el scrollpane es para usar las barras de desplazamiento y los datos no se pierdan.

Al scrollpane le puedes agregar un panel con el formulario donde pides los datos, eso se hace asi:

Código:
this.PanelPpal.setViewportView(panel);
El codigo anterior va en el frame o sea que el this hace referencia al frame mismo y el PanelPpal es un objeto de tipo ScrollPane que se puede agregar con el asistente del netbeans para evitar la creación por codigo. panel es el panel que quieres que sea mostrado en el frame, en otras palabras panel es el que tiene el formulario.


Ya sabes como mostrar un panel dentro del Frame, ahora como retornar el panel a mostrar ? se puede hacer asi:

Código:
public JPanel getPanel(){
        return this;
}
Este pequeño metodo va dentro del codigo de tu panel asi cuando el retorne this se retornará el mismo con todo su contenido.


Como se unen las dos cosas ?


En java todo es un objeto por lo tanto sus formularios y elementos tambien lo son, deberias crear una forma de llamar el objeto frame sin problemas, pero la cuestion es que no puedes declarar mas de un objeto de tipo frame porque cuando cierres uno se cierra toda la aplicacion, esto se resuelve usando algo que es sencillo conceptualmente, se llama el patron de diseño singleton que lo unico que hace es evitar que exista mas de un objeto de un determinado tipo en la aplicacion. Codigo:

Código:
    /** Constructor privado*/
    private FormPrincipal() {
        initComponents();
    }

    /**
     * Este metodo obtiene la instancia del objeto FormPrincipal
     * @return
     */
    public static FormPrincipal obtenerInstancia(){
        if(miInstancia == null)
            miInstancia = new FormPrincipal();
        return miInstancia;
    }
Los dos metodos anteriores estan dentro del frame y garantizan que solo se pueda crear un objeto de ese tipo en la ejecucion.


Ya tienes el panel y tienes el frame pero necesitas que al dar click en agregar otro se cargue el mismo formulario, para eso supongamos que tienes un boton "agregar otro" en el evento actionperformed de ese boton llamas al metodo que cargue el panel y lo que hace es :

Código:
FormPrincipal formPrincipal = FormPrincipal.obtenerInstancia();
formPrincipal.setPanel(this.getPanel());
Primero llamas la instancia del form principal y luego le asignas un panel para ser mostrado y no es nada mas y nada menos que el panel que tenemos en el momento.

Saludos.
__________________
Dejenme saber cuando estoy equivocado y cuando estoy en lo cierto dejenme saber si existe una solución mejor.