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

Aplicación con dos JFrames?

Estas en el tema de Aplicación con dos JFrames? en el foro de Java en Foros del Web. Buenas amig@s, Estoy diseñando una aplicación. Soy muy novato y me surgen par de dudas. - Tengo entendido que es recomendable crear un único JFrame ...
  #1 (permalink)  
Antiguo 03/08/2015, 03:31
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Aplicación con dos JFrames?

Buenas amig@s,

Estoy diseñando una aplicación. Soy muy novato y me surgen par de dudas.

- Tengo entendido que es recomendable crear un único JFrame que es la ventana principal de la aplicación y el resto de ventanas JDialog hijos. La aplicación que estoy creando tiene un control de usuario pero luego tiene un menú principal que es la ventana principal de la aplicación. Una vez que el usuario hace login escondo el Jframe y creo otro JFrame completamente nuevo que hace de menú principal (me interesa que sea JFrame por lo de poder minimizarlo).
Es correcto lo que hago o hay otra forma mas adecuada?

- En la aplicacion he creado un menu superior de acceso rapido que esta accesible en el JFrame menú principal y los JDialogs hijos. Mi pregunta es, seria posible en un JDialog nieto cerrar el JDialog padre también para posteriormente abrir el que el usuario haya seleccionado del menú superior?

Perdón por el tocho.
Gracias de antemano y saludos
  #2 (permalink)  
Antiguo 03/08/2015, 06:33
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Aplicación con dos JFrames?

En referencia al punto 2 entiendo que con que el método getParent() del formulario puedo ir accediendo a los formularios padres e ir cerrándolos hasta llegar al principal.
Aun no lo he probado pero debería funcionar.
  #3 (permalink)  
Antiguo 04/08/2015, 01:14
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Aplicación con dos JFrames?

Adjunto codigo que llevo al hacer logout y abrir validar solicitudes area . En el caso de escoger otra opcion seria igual cerrar los JDialogs abiertos y abrir el seleccionado.

if (null != e.getActionCommand())switch (e.getActionCommand()) {

case "valArea":
if(jd != null){ //
jd.dispose();
JD_Fitxa_validacions_formacions fvfa = new JD_Fitxa_validacions_formacions ((JF_Menu_principal)jd.getParent(), true, user);
fvfa.setAlwaysOnTop(false);
fvfa.setVisible(true);
}else if (jf != null){
JD_Fitxa_validacions_formacions fvfa = new JD_Fitxa_validacions_formacions (jf, true, user);
fvfa.setAlwaysOnTop(false);
fvfa.setVisible(true);
}
case "logExit":

if(jf != null){ //Si es formulario principal se cierra y abrimos el control usuario
jf.dispose();
JF_Control_Usuari cu = new JF_Control_Usuari ();
}else{ //Se trata de un JDialog. Se cierra y se comprueba si el padre es un JFrame
jd.dispose();
if(jd.getParent() instanceof JF_Menu_principal){
jf = (JF_Menu_principal)jd.getParent();
jf.dispose();
}

JF_Control_Usuari cu = new JF_Control_Usuari ();
}
}

Como puedo saber si es un formulario nieto cual es el padre? Tengo varios JDialogs que su pueden abrir y con un instanceof JDialog me da error null pointer exception.

Gracias

Última edición por Hatakke; 04/08/2015 a las 02:16
  #4 (permalink)  
Antiguo 04/08/2015, 05:15
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Aplicación con dos JFrames?

Al final conseguí lo que quería. Llevaba días con ello :)

Este método me cierra los JDialogs abiertos y obtengo el Jframe principal:
Código PHP:
    private void obrir_opcio_seleccionada (){  
        
        
boolean aturar false;
        
JDialog jd_temp;
        
       if(
jd != null){ // El formulario abierto es un JDialog
            
while(aturar != true){
                if(
jd.getParent() instanceof JF_Menu_principal ){ // Si el formulario padre es el menu principal
                    
this.jf = (JF_Menu_principaljd.getParent(); // Obtenemos el formulario padres
                    
jd.dispose(); //Cerramos el JDialog abierto
                    
aturar true;
                }else{
                    
jd_temp = (JDialogjd.getParent(); //Obtenemos el formulario padre del JDialog
                    
if(jd_temp.getParent() instanceof JF_Menu_principal){ //Comprovamos si el padre del JDialog obtenido es el menu principal
                        
this.jf = (JF_Menu_principal)jd_temp.getParent(); // Obtenemos el formulario padres
                        
jd jd_temp;      //Obtenemos el JDialog padre
                        
jd.dispose();      //Cerramos el JDialog abierto
                        
jd_temp.dispose(); //Cerramos el JDialog abierto
                        
aturar true;
                    }else{ 
//El padre del JDialog obtenido no es el menu principal
                        
jd jd_temp;      //Obtenemos el JDialog padre
                        
jd.dispose();      //Cerramos el JDialog abierto
                        
jd_temp.dispose(); //Cerramos el JDialog abierto
                        //Damos otra vuelta al While
                    
}
                }
            }
        }
    } 
Luego un par de ejemplos del uso:

Código PHP:
           case "proLlista"
 
//Cierra los JDialogs abiertos i obtengo el Jframe principal
                
obrir_opcio_seleccionada ();
//Muestro el que me interesa
                
JD_Graella_proveidors gp = new JD_Graella_proveidors (jftrueuser);
                
gp.setAlwaysOnTop(false);
                
gp.setVisible(true); 
                break;
            case 
"logExit":
 
//Cierra los JDialogs abiertos i obtengo el Jframe principal
                
obrir_opcio_seleccionada ();
//Cierro el JFrame principal
                
jf.dispose();
//Muestro el menu login
                
JF_Control_Usuari cu = new JF_Control_Usuari (); 
Saludos

Última edición por Hatakke; 05/08/2015 a las 00:19 Razón: Añadir [ PHP ]

Etiquetas: jdialog, jframe, padre
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 17:30.