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_principal) jd.getParent(); // Obtenemos el formulario padres
jd.dispose(); //Cerramos el JDialog abierto
aturar = true;
}else{
jd_temp = (JDialog) jd.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 (jf, true, user);
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