jueves, 18 de diciembre de 2014

Ejemplo: JavaSE, aplicación MVC - IX

Hola jabatos:

Hoy vamos a crear la clase principal de nuestra capa de negocios, "EnterSandMan". Estará ubicada, lógicamente, dentro del package "controls".

Esta clase EnterSandMan requiere explicaciones. La lógica de negocio consiste más o menos en:
  1. En la clase de entrada creamos un hilo. Y luego instanciamos la clase main (EnterSandMan) para dar inicio a la aplicación.
  2. Se crea un JFrame static. Ese JFrame será único para cada instanciación de la aplicación; lo que cambiará serán los contenidos y la información requerida o mostrada.
  3. La información se mostrará en el panel central del JFrame. Y es este panel central el que se cambiará, sustituyendo el componente que hubiera por el nuevo a incorporar. También se cambiará el título que está ubicado en el panel superior.
  4. El flujo sería: ( PanelIdentificacion <==> PanelCreacion ) ==> TabbedPrincipal 
  5. Se implementará un método para cambiar los paneles superior y central, según el punto anterior. Para cada panel se implementará un método, que deberá ser invocado desde clases distintas a EnterSandMan.
  6. También daremos a los JOptionPane que hay en las clases de la capa vista, un componente de referencia para que salgan bien centrados: el propio JFrame. Así evitaremos el molesto problema de que los mensajes salgan descentrados de la pantalla de la aplicación.
Y todo ello se consigue con este código:

public class EnterSandMan {

// ventana y paneles principales
private static JFrame mainFrame;
private JPanel mainPanel1;
private MainWindow window;
// objeto Usuarios
private Usuarios user;

public EnterSandMan() {
// CONSTRUCTOR
}

/**
* Este método inicializa la aplicación. Muestra la pantalla de identificación de usuarios.
*/
public void initApp() {
//instancia el panel principal responsable de la identificacion
PanelIdentificacion panel=new PanelIdentificacion();
mainPanel1=panel.makePanelIdentificacion();
// instancia el fabricador de la ventana principal
window=new MainWindow();
// crea el JFrame principal, con el constructor makeWindows
mainFrame=window.makeWindows(600,400,100,100,"ejemplo Swing versión 1.0",createTitlePanel(" IDENTIFICACIÓN "), createBorderPanel(), createBorderPanel(), mainPanel1, createBottomPanel());
// hace visible la ventana JFrame
mainFrame.setVisible(true);

}

/**
* Este método sustituye la vista de la pantalla de identificación
* por la vista de la pantalla de creación de nuevos usuarios
*/
public void createUserApp() {
mainFrame.setVisible(false);
//instancia el panel responsable de creacion usuarios
PanelCreacion panel=new PanelCreacion();
mainPanel1=panel.makePanelCreacion();
mainFrame=window.changeMainPanel(mainPanel1,createTitlePanel(" ALTA USUARIO "));
mainFrame.pack();
mainFrame.revalidate();
mainFrame.setVisible(true);
}

/**
* Este método sustituye la pantalla de creación de nuevos usuarios
* por la vista de la pantalla de identificación
*/
public void showIdentificationApp() {
mainFrame.setVisible(false);
//instancia el panel principal responsable de la identificacion
PanelIdentificacion panel=new PanelIdentificacion();
mainPanel1=panel.makePanelIdentificacion();
mainFrame=window.changeMainPanel(mainPanel1,createTitlePanel(" IDENTIFICACIÓN "));
mainFrame.pack();
mainFrame.revalidate();
mainFrame.setVisible(true);
}

/**
* Este método muestra la pantalla de información del usuario, mediante
* un menú de dos pestañas. 
* @param user - Objeto Usuarios con los datos del usuario.
*/
public void showTabbedPane(Usuarios user) {
this.user=user;
mainFrame.setVisible(false);
//instancia el panel principal responsable de mostrar info
TabbedPrincipal panel=new TabbedPrincipal();
mainFrame=window.changeMainPanel(panel.getDataPanel(this.user),createTitlePanel(" DATOS USUARIO "));
mainFrame.pack();
mainFrame.revalidate();
mainFrame.setVisible(true);
}

public static JFrame getMainFrame() {
// obtener el JFrame principal para mensajes
return mainFrame;
}

/*  ZONA DE PANELES PRIVADOS */

/**
* Este método crea el  panel del titulo
* @return JPanel
*/
private JPanel createTitlePanel(String title) {
// Creamos el titulo en un JLabel
JLabel lab=new JLabel(title);
lab.setFont(new Font("Arial",Font.BOLD,20));
lab.setAlignmentX(JLabel.CENTER_ALIGNMENT);
// creamos el JPanel del titulo, y lo rellenamos con labels vacios
// para el mejor ajuste del diseño
JPanel pan=new JPanel();
pan.setLayout(new BoxLayout(pan,BoxLayout.Y_AXIS));
pan.add(new JLabel(" "));
pan.add(lab);
pan.add(new JLabel(" "));
pan.add(new JLabel(" "));
pan.setVisible(true);
return pan;
}

/**
* Este método crea los paneles laterales
* @return JPanel
*/
private JPanel createBorderPanel() {
// Creamos el JPanel, y le añadimos un elementos JLabel relleno con los
// espacios necesarios para realizar el ajuste marginal necesario
JPanel pan=new JPanel();
pan.add(new JLabel("                                  "));
pan.setVisible(true);
return pan;
}

/**
* Este método crea el panel bottom
* @return JPanel
*/
private JPanel createBottomPanel() {
// Creamos el pie en un JLabel
JLabel lab=new JLabel(" Aplicación creada por musef2904@gmail.com ");
lab.setFont(new Font("Arial",Font.BOLD,12));
lab.setAlignmentX(JLabel.CENTER_ALIGNMENT);
// Creamos el JPanel, y le añadimos el elemento JLabel con el
// pie a mostrar
JPanel pan=new JPanel();
pan.setLayout(new BoxLayout(pan,BoxLayout.Y_AXIS));
pan.add(new JLabel(" "));
pan.add(new JLabel(" "));
pan.add(lab);
pan.add(new JLabel(" "));
pan.setVisible(true);
return pan;
}

} // ********** END OF CLASS


  • Método initApp(). Solamente será invocado una vez, desde la clase de entrada EjemploSwing. Crea el JFrame y lo llena con el JPanel de identificación
  • Método createUserApp().  Se invoca desde el JPanel de identificación a través de changeMainPanel(). Construye la estructura para la creación del User.
  • Método showIdentificacionApp(). Se invoca desde el JPanel de creación a través de changeMainPanel(). Reconstruye nuevamente el panel de Identificación.
  • Método showTabbedPane(). Se invoca desde JPanel de identificación a través de changeMainPanel(). Construye la estructura de pestañas con la información del usuario, una vez que éste se ha identificado correctamente.
  • Método getMainFrame(). Retorna el JFrame, al objeto de que puedan utilizar sus métodos las clases del package "views".
  • El resto de métodos privados de EnterSandMan se utilizan para la creación del resto de los componentes que se incluyen dentro del BorderLayout. Sirven para construir el aspecto de la ventana de la aplicación.
Ya solamente nos quedan los últimos retoques...

Anterior tema                                                                                         Siguiente tema

No hay comentarios:

Publicar un comentario