FORMULARIOS MDI PROCEDIMIENTOS ALMACENADOS
Los programas de ordenador grficos de Interfaz de Mltiples Documentos (MDI) son aquellos cuyas ventanas se encuentran dentro de una ventana padre (normalmente con la excepcin de las ventanas modales), de manera opuesta a una interfaz de documento nico o SDI. Ha habido muchos debates sobre qu tipo de interfaz se prefiere. Generalmente se considera que SDI es ms til si los usuarios trabajan con varias aplicaciones. Las compaas han utilizado ambos sistemas con reacciones diversas. Por ejemplo, Microsoft ha cambiado la interfaz de sus aplicaciones Office de SDI a MDI y luego otra vez a SDI, aunque el grado de implementacin vara entre componentes. La principal desventaja de MDI es la escasez de informacin sobre las ventanas abiertas: Para ver una lista de ventanas abiertas de una aplicacin MDI, el usuario normalmente tiene que seleccionar un men especfico ("lista de ventanas" o algo parecido), si esta opcin est disponible. Con una aplicacin SDI, la barra de tareas del administrador de ventanas muestra las ventanas abiertas actualmente. En los ltimos aos, las aplicaciones han aadido barras de tareas o sistemas de pestaas a las aplicaciones MDI, lo que ha hecho obsoleta esta crtica. Algunas personas usan un nombre distinto para este tipo de interfaz, "interfaz de pestaas" (TDI). Cuando se usa pestaas para controlar las ventanas, estas normalmente no se pueden cambiar de tamao por separado. Creando un formulario MDI En nuestro proyecto ya tenemos un formulario JFrame denominado ventanaPrincipal, pero para efectos didcticos vamos a crear uno nuevo y al final eliminaremos el Jframe anterior. 1. Click derecho en nuestro paquete por defecto -> Nuevo -> JFrameForm.
2.
Next, Colocamos un nombre nuestro formulario MDI formulario_MDI. Luego click en Finish.
3.
Aade los objetos JMenuBar, JMenuItem y JDesktopPane, este ltimo es una subclase de JLayeredPane que nos permite manipular frames interno. Tambin para agregar un menu puede hacer clic derecho sobre la barra de men y seleccionar Add menu
Para que el JdesktopPane cubra todo el rea del Frame hacer click derecho sobre l, seleccionar Auto Resizing/ activar horizontal y vertical. Arrastrar a la esquina superior izquierda hasta conseguir se adapte al tamao interior del frame.
4.
Ahora para insertar el frame interno, nos dirigimos al paquete de nuestro proyecto, hacemos clic derecho y escogemos NEW -- OTHER -- en la ventana que nos aparece, buscamos SWING GUI FORMS luego JINTERNALFRAME, presionas siguiente y coloca un nombre al form, "texto_filmico" y para terminar FINISH
5.
Realiza este paso una vez ms, para insertar el formulario Dialog, nos dirigimos al paquete de nuestro proyecto, hacemos clic derecho y escogemos NEW -- OTHER -- en la ventana que nos aparece, buscamos SWING GUI FORMS luego JDIALOGFOM, presiona siguiente y coloca un nombre al form, "login" y para terminar FINISH
6.
Haz clic derecho sobre el JInternalFrame "texto_filmico" y elige "propiedades" (properties), y realiza los siguientes cambios :
Podemos trabajar con los nuevos objetos "login" "texto_filmico" independientemente, y aadirles los objetos para trabajar en ellos.
7.
Para llamar al dialog login desde el jFrame padre, abrir la vista source y agregar el procedimiento llamar_login y en el mtodo principal llamar al dicho mtodo. private void llamar_login() { // Abrimos el formulario JDialog formulario_MDI frame= new formulario_MDI(); login l = new login(frame,true); l.setSize(500, 300) //Centrar con respecto al formulario principal l.setLocationRelativeTo(frame); //Desactiva el boton cerrar de la ventana login. l.setDefaultCloseOperation(l.DO_NOTHING_ON_CLOSE); // Evita que el usuario pueda redimensionar el formulario l.setResizable(false); l.setVisible(true); } @SuppressWarnings("unchecked") public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { llamar_login(); } }); } Aadir elementos al form login para que nos solicite los datos de autenticacin ante el sistema.
8.
9.
Cdigo para el botn Aceptar: import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JOptionPane; public class login extends javax.swing.JDialog {
Statement stmt = null; ResultSet rs = null; conexion con= new conexion(); public login(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } @SuppressWarnings("unchecked") private void initComponents()
private void loguear() { try{ CallableStatement cstmt = con.getConnection().prepareCall("{call dbo.loguear(?,?)}"); //pasamos los dos parmetros al procedimiento de SQLServer para buscar en la BD. cstmt.setString("usern", (jtfUser.getText())); cstmt.setString("passw", (psPassword.getText())); rs = cstmt.executeQuery(); //Tomamos lo escrito en los text String usuario=jtfUser.getText().trim(); String password=new String(psPassword.getPassword()); Boolean entra=false; //Para saber si fue positivo o no el ingreso al sistema while(rs.next()) { if(usuario.equals(rs.getString("username")) && password.equals(rs.getString("password"))) { JOptionPane.showMessageDialog(null,"Bienvenidos al sistema"); entra=true; // quiere decir que si entro al sistema this.dispose(); //Cierra el jDialog login break; } } if(entra==false)// si no entr al sistema { JOptionPane.showMessageDialog(null,"Usuario o contrasea incorrecto"); } }catch(SQLException e) { JOptionPane.showMessageDialog(null,"Error " + e.getMessage()); } }
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { loguear(); } 10. Ahora nos vamos al SQLServer y creamos un procedimiento almacenado dentro de la base de datos SakilaSQL.
11.
Codificamos para buscar en la tabla staff el usuario y contrasea que se le va a pasar desde java.
USE [access-sakilaSQL1] GO /****** Object: StoredProcedure [dbo].[loguear] Script Date: 21/06/2013 11:46:04 p.m. ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[loguear] -- Parmetros que recibirn los datos del usuario tales como usuario y password desde java @usern nvarchar(16), @passw nvarchar(40) AS BEGIN SET NOCOUNT ON; -- Insert statements for procedure here -- Selecciona el usuario y contrasea que coincidan con los datos de los parmetros @usern y @passw SELECT [staff].[username], [staff].[password] from staff where [staff].[username]=@usern and [staff].[password]=@passw; END
12.
Ejecutar. El procedimiento almacenado para guardarlo.
13.
Regresamos a NetBeans y ejecutamos la aplicacin para comprobar los resultados.
Mientras no se introduzca el password correcto, no se podr acceder a la ventana que contiene el men de nuestra aplicacin.
Ahora vamos a trabajar el men de nuestra aplicacin, para ello vamos a llamar a los formularios que han sido creados en nuestra aplicacin. 1. Abrimos el formulario_MDI de nuestra aplicacin y modificamos el sistema de mens, obteniendo la siguiente presentacin.
2.
Ahora vamos a agregar imgenes a los mens; pero antes debemos crear un paquete para almacenar las imgenes y mejorar la organizacin de nuestro proyecto. A este nuevo paquete llmalo imagenes
3.
Para colocar los conos debes seleccionar el men correspondiente y en la ventana de propiedades hacer clic en el botn de icono.
4.
Seleccionar el paquete imgenes/clic en el botn import to Project. Esto hace que las imgenes a importar se almacenen dentro del paquete imagenes
5.
Seleccionar la ruta para encontrar la imagen e importarla
6.
Clic en siguiente y finalizar.
7.
Una vez que hayamos importado, ahora seleccionar la lista file y escoger la imagen correspondiente.
8. 9.
Para los dems mens, nuevamente seleccionar el correspondiente/propiedad icono/seleccionar de la lista file el icono/ok. Ejecutar la aplicacin.
men
10. Programar al submen actor para llamar al formulario texto_filmico.
11. Codificar lo siguiente. private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) { // Se crea el objeto pe texto_filmico tf= new texto_filmico (); //se adapta al tamao del jDesktopPane1 tf.setSize(jDesktopPane1.getSize()); // se agrega el jframeinternal al jDesktopPane1 this.jDesktopPane1.add(tf); tf.show(); } 12. Ejecutar.
13. Finalmente, vamos a agregar un procedimiento al formulario principal para que al momento de salir nos confirme si realmente deseamos salir o no. Vamos a codificar debajo del procedimiento anterior llamar_login() public void cerrar() { Object [] opciones ={"Aceptar","Cancelar"}; int eleccion = JOptionPane.showOptionDialog(null,"Realmente desea salir de la aplicacin","Mensaje de Confirmacion", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,null,opciones,"Aceptar");
if (eleccion == JOptionPane.YES_OPTION) { System.exit(0); }else {} } 14. En el evento Windows_clousing. Llamar al procedimiento cerrar().
private void formWindowClosing(java.awt.event.WindowEvent evt) { cerrar(); } 15. Ejecutar
Ejercicios: Implementar el formulario texto_flmico, tal como se muestra a continuacin, la funcionalidad debe ser similar al formulario mantActor. Debe usar procedimientos almacenados para las acciones de eliminar, nuevo, buscar y actualizar.