Hola jabatos:
He aquí la conclusión ( ¡¡ por fin !! ) de este ejemplo. Solo nos quedan retoques...
Primeramente en la clase MainWindow, hemos de finalizar el método changeMainPanel, para que nos permita cambiar de panel de componente entre PanelCreacion(), PanelIdentificacion() y TabbedPrincipal().
public JFrame changeMainPanel(JComponent newComponent, JPanel title) {
this.north=title;
this.center= newComponent;
window=makeWindows(this.width,this.height,EjemploSwing.getEnter().getMainFrame().getY(), EjemploSwing.getEnter().getMainFrame().getX(), this.title, this.north, this.east, this.west, newComponent,this.south);
return window;
}
La línea que hemos incorporado hace básicamente lo siguiente: recupera el tamaño de la pantalla que habíamos definido al crearla, toma las ubicaciones actuales (y,x) donde se halla colocada la pantalla, y añadimos los componentes, tanto los anteriores (los que no cambian) como los recién suministrados,al objeto de construir una nueva pantalla JFrame y asignársela al componente window.
Hay que tener en cuenta que window en realidad es un objeto instanciado en EnterSandMan, y que éste a su vez es un componente static instanciado por EjemploSwing. Lo cual nos lleva a que el objeto window es un componente static por derivación y es por ello que "recuerda" su título y los componentes que le suministramos cuando fue creado.
Siguiente cosa, cambios en el panelCreación:
Teníamos pendiente de implementar el cambio de pantalla. Debemos incluir dentro del actionPerformed la invocación del método siguiente:
if (source.equals("Volver")) {
// volvemos a la pantalla de identificacion
EjemploSwing.getEnter().showIdentificationApp();
}
Y también en:
if (userDAO.createUser(usuario)) {
JOptionPane.showMessageDialog(null, "Usuario grabado correctamente", "Grabación de usuarios", JOptionPane.INFORMATION_MESSAGE);
// volvemos a la pantalla de identificacion
EjemploSwing.getEnter().showIdentificationApp();
} else {
JOptionPane.showMessageDialog(null, "Error grabando el usuario", "Grabación de usuarios", JOptionPane.ERROR_MESSAGE);
}
La explicación de la instrucción incluida es la siguiente: Hay que invocar el JFrame "actual", y eso se consigue desde la clase que lo creó "EjemploSwing". Recordad que en esa clase construimos un método getEnter() que nos proporciona acceso al JFrame, y a través de él a sus métodos y propiedades ;-). Hay otras formas, pero yo prefiero ésta...
Y sigamos por el panelIdentificacion:
Teníamos pendiente de implementar el cambio de pantalla. Debemos incluir dentro del actionPerformed:
// crear nuevo usuario
if (source.equals("Nuevo")) {
EjemploSwing.getEnter().createUserApp();
}
Y también en:
if (activeUser!=null) {
// usuario identificado, pasamos el control al main
EjemploSwing.getEnter().showTabbedPane(activeUser);
} else {
JOptionPane.showMessageDialog(null, "No existe el usuario/password suministrado", "Identificación de usuarios", JOptionPane.ERROR_MESSAGE);
}
El proceso es semejante al caso anterior, pero aquí nos encontramos con dos posibilidades. Si queremos crear un usuario se emplearía el createUserApp(). Y si hemos procedido a la identificación, entonces hay que invocar el método showTabbedPane() con el parámetro del objeto Usuario conteniendo la información a mostrar.
Ya casi hemos terminado. Solamente nos quedaría (S.E.u.O.) un pequeño retoque. Tenemos varios JOptionPane en las clases PanelCreacion(), PanelIdentificacion(), PanelPersonal() y PanelProfesional(); esos JOptionPane están referenciados al objeto null, o sea, que salen en mitad de la pantalla de nuestro equipo, independientemente de donde tengamos ubicada la aplicación. Para evitar ese inadecuado comportamiento, hay que cambiar todos los
null por ==> EnterSandMan.getMainFrame()
lo cual habilita para que salgan centradas las pantallas con mensajes en nuestro JFrame principal.
Ya está. Creo... bueno, el aspecto de nuestro proyecto es el siguiente:
Fin de proyecto. Ejecutado, probado y funciona... el users.dat contendrá los datos de los usuarios que vayamos creando, en formato txt.
Gracias por vuestra paciencia...
Anterior tema
No hay comentarios:
Publicar un comentario