PRÁCTICA 3 Cajas de Diálogo

21
Dr. Hernán de la Garza Práctica 3 1 PRACTICA 3.- Cajas de Diálogo Objetivo Desarrollar un programa que utilize cajas de diálogo predefinidas, personalizadas y del tipo estándar, navegando entre diferentes formularios. Objetivos específicos: Usar MessageBox, InputBox, ConfirmBox, OptionBox de Java. Usar JDialog para crear nuevos formularios y navegar entre ellos. Usar JFileChooser y JColorChooser. Introducción En muchas aplicaciones se hace necesario el visualizar nuevos datos, nueva información o bien, realizar una tarea previa para poder continuar con la ejecución de la misma. Es así que no le resulta extraño al usuario el que se muestren y se cierren ventanas durante la ejecución, ya sea para pedir datos, que se realice alguna confirmación o acción, o por cualquier otra cosa que la aplicación en su ejecución necesite. En esta práctica se verá la manera de generar nuevas ventanas, adicionales al formulario principal, diseñadas para realizar la tarea que se requiera. Francisco Javier Ceballos reporta tres formas de añadir nuevas ventanas a una aplicación: Cajas de diálogo predefinidas. Son cajas de diálogo ya diseñadas y que al momento de requerirse se crean instancias de ellas por medio de la clase JOptionPane de la biblioteca JFC (Java Foundation Class). Un ejemplo es showMessageDialog. Cajas de diálogo personalizadas. Son cajas de diálogo hechas a la medida, para lo cual se cuenta con la clase JDialog. Cajas de diálogo estándar. Son cajas de diálogo muy comunes. La clase JFileChooser permite crear las ventanas para Abrir o Guardar archivos y la clase JColorChooser muestra la paleta de colores para hacer algún cambio de color en nuestra aplicación. Muchas de las ventanas que se muestran cuentan con varios botones que se pueden pulsar y que al momento de regresar a la ventana inicial, debemos saber cuál de esos botones fue pulsado para realizar la tarea correspondiente. Considere el caso de una ventana que ofrezca los botones OK, Retry, Cancel, deberemos entonces poder actuar conforme lo determine el usuario del programa. De igual manera en muchas ventanas adicionales se capturan datos que debemos

description

cajas

Transcript of PRÁCTICA 3 Cajas de Diálogo

  • Dr. Hernn de la Garza Prctica 3 - 1

    PRACTICA 3.- Cajas de Dilogo Objetivo Desarrollar un programa que utilize cajas de dilogo predefinidas, personalizadas y del tipo estndar, navegando entre diferentes formularios. Objetivos especficos:

    Usar MessageBox, InputBox, ConfirmBox, OptionBox de Java. Usar JDialog para crear nuevos formularios y navegar entre ellos. Usar JFileChooser y JColorChooser.

    Introduccin En muchas aplicaciones se hace necesario el visualizar nuevos datos, nueva informacin o bien, realizar una tarea previa para poder continuar con la ejecucin de la misma. Es as que no le resulta extrao al usuario el que se muestren y se cierren ventanas durante la ejecucin, ya sea para pedir datos, que se realice alguna confirmacin o accin, o por cualquier otra cosa que la aplicacin en su ejecucin necesite. En esta prctica se ver la manera de generar nuevas ventanas, adicionales al formulario principal, diseadas para realizar la tarea que se requiera. Francisco Javier Ceballos reporta tres formas de aadir nuevas ventanas a una aplicacin:

    Cajas de dilogo predefinidas. Son cajas de dilogo ya diseadas y que al momento de requerirse se crean instancias de ellas por medio de la clase JOptionPane de la biblioteca JFC (Java Foundation Class). Un ejemplo es showMessageDialog.

    Cajas de dilogo personalizadas. Son cajas de dilogo hechas a la medida, para lo cual se cuenta con la clase JDialog.

    Cajas de dilogo estndar. Son cajas de dilogo muy comunes. La clase JFileChooser permite crear las ventanas para Abrir o Guardar archivos y la clase JColorChooser muestra la paleta de colores para hacer algn cambio de color en nuestra aplicacin.

    Muchas de las ventanas que se muestran cuentan con varios botones que se pueden pulsar y que al momento de regresar a la ventana inicial, debemos saber cul de esos botones fue pulsado para realizar la tarea correspondiente. Considere el caso de una ventana que ofrezca los botones OK, Retry, Cancel, deberemos entonces poder actuar conforme lo determine el usuario del programa. De igual manera en muchas ventanas adicionales se capturan datos que debemos

  • Dr. Hernn de la Garza Prctica 3 - 2

    poder recuperar y usar en la ventana original una vez que la ventana auxiliar haya sido cerrada. En esta prctica se usarn los tres tipos de cajas de dilogo y se identificarn los datos capturados as como los botones pulsados. Correlacin con los temas y subtemas del programa de estudio vigente Esta prctica est directamente relacionada con las unidades II y III ya que se hace uso nuevamente de la interfaz grfica es decir el entorno de desarrollo, al hacer uso de las facilidades que brinda al programador. Se profundiza en conocer nuevos elementos como el JDialog que permite crear nuevas ventanas dependientes del mismo Frame, as como tambin el uso de componentes visuales y no visuales. Esto ltimo pertenece a la unidad tres del temario. Material y equipo necesario

    Computadora o laptop NetBeans versin 7.2 o superior.

    Metodologa Las cajas de dilogo se clasifican en tres categoras: Cajas de Dilogo Predefinidas, Cajas de Dilogo Personalizadas y Cajas de Dilogo Estndar. Presentaremos los tres tipos de cajas en una sola aplicacin pero en tres partes. Parte Uno: Uso de Cajas de Dilogo Predefinidas Paso 1. Crear un nuevo proyecto de nombre Practica3_CajasDialogo. Desmarcar la casilla para que no genere clase main (Create Main Class). Paso 2. Aadir un JFrame Form al proyecto. Disee el formulario tal como se muestra en la siguiente imagen:

  • Dr. Hernn de la Garza Prctica 3 - 3

    Cambiamos los nombres de todos los componentes que se usan en este formulario conforme a la siguiente relacin:

    jButton1 jbtMessage jButton2 jbtConfirm jButton3 jbtInputUno jButton4 jbtInputDos jButton5 jbtOption jButton6 jbtAvanzar jLabel1. jlbPassword jPasswordField1 jpfPassword jLabel2. jlbBoton jLabel3. jlbDatoUno jLabel4. jlbDatoDos

    Paso 3. Dar doble clic sobre el botn jbtMessage para hacer que se muestre la estructura del mtodo que tiene asociado por default y que para los botones les corresponde la del evento actionPerformed. Una segunda manera de escoger este evento es dar clic derecho estando el cursor encima del componente botn. En el men emergente escoger Events y luego buscar la categora action y de ah, el actionPerformed. Una tercera manera de escoger el evento de accin, es seleccionar el botn jbtMessage y luego ir a la ventana de propiedades. En la parte superior de esta ventana hay cuatro categoras entre las que se encuentra Events. Selccionar esta

  • Dr. Hernn de la Garza Prctica 3 - 4

    categora y se despliegan todos los eventos que pueden ser controlados para este componente. Se busca en la lista el evento de actionPerformed. Independientemente de cual fue el camino seguido para activar el evento actionPerformed, el cdigo para ese botn es el siguiente: private void jbtMessageActionPerformed(java.awt.event.ActionEvent evt) { JOptionPane.showMessageDialog(this, "Esto es un MessageDialog", "Probando Cajas", JOptionPane.OK_CANCEL_OPTION); } Ejecute el programa y al hacer clic en el botn Message aparecer una ventana semejante a esta:

    La ventana de mensaje aparece dentro de la ventana principal ya que el primer argumento usado en su construccin dice this, indicando que esa ventana es su ventana padre, cambie este argumento por null y observe el nuevo comportamiento. Pruebe a cambiar el argumento del JOptionPane. La sintaxis del MessageDialog es la siguiente: public static void showMessageDialog(Component componentePadre, Object mensaje, String ttulo, int tipoMensaje,

  • Dr. Hernn de la Garza Prctica 3 - 5

    Icon icono) Throws HeadlessException Los dos primeros argumentos son indispensables, los dems son opcionales. Observe como usamos solamente cuatro de los cinco argumentos posibles ya que el ltimo no lo especificamos. Pruebe a usar una expresin semejante a la siguiente: JOptionPane.showMessageDialog(this, "Esto es un MessageDialog", "Probando Cajas", JOptionPane.OK_CANCEL_OPTION, new ImageIcon("C:\\Archivos de programa\\" + "Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"));

    Usted puede sustituir la ruta que aparece en el new ImageIcon ya que esa funciona para la computadora en la que se est escribiendo. Paso 4. Procederemos a mostrar el cdigo para el botn jbtConfirm, el cual desplegar un ConfirmDialog. private void jbtConfirmActionPerformed(java.awt.event.ActionEvent evt) { int resp =JOptionPane.showConfirmDialog(null, "Desea Continuar"); jlbBoton.setText("Boton pulsado: " + resp); } Al ejecutar el programa y pulsar el botn Confirm se muestra lo siguiente:

  • Dr. Hernn de la Garza Prctica 3 - 6

    Enseguida cerramos la ventana pulsando S. Se regresa a la ventana padre y se ve en la etiqueta Botn pulsado un 0 (cero), el cual corresponde al valor del botn pulsado en la ventana del confirm, ya que se numeran a partir del cero. Pruebe hacer clic en los dos botones restantes, as como cerrar la ventana pulsando la x en la esquina superior derecha. Reporte los valores que corresponden a cada opcin.

    Se ha presentado la versin corta del confirmDialog, ya que al igual que el messageDialog, tiene varios parmetros adicionales que se pueden utilizar. La sintaxis de esta caja de dilogo es la siguiente: public static void showConfirmDialog(Component componentePadre, Object mensaje, String ttulo, int botones, int tipoMensaje, Icon icono) Throws HeadlessException Pruebe sustituyendo la activacin del confirmDialog por esta nueva instruccin: int resp =JOptionPane.showConfirmDialog(null, "Desea Continuar?", "Probando Cajas", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE, new ImageIcon("C:\\Archivos de programa\\" + "Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"));

  • Dr. Hernn de la Garza Prctica 3 - 7

    Paso 5. Continuamos con el botn Input Uno, con el desplegaremos un InputDialog el cual se usa para solicitar datos. El cdigo de activacin es el siguiente: private void jbtInputUnoActionPerformed(java.awt.event.ActionEvent evt) { String clave = JOptionPane.showInputDialog("Palabra de Paso"); jlbDatoUno.setText("Dato tecleado o seleccionado: " + clave); } La ventana desplegada es:

    Tecleamos algo en la caja de texto (hernan) y pulsamos ya sea aceptar o cancelar. Regresamos a la ventana principal:

    Observe el texto que dice Datos tecleado o seleccionado: hernan.

  • Dr. Hernn de la Garza Prctica 3 - 8

    El mtodo showInputDialog devuelve el objeto String tecleado si se puls Aceptar o null si se puls Cancelar. Se ha presentado la versin ms corta de esta caja de dilogo. Su sintaxis es como sigue: public static void showInputDialog(Component componentePadre, Object mensaje, String ttulo, int tipoMensaje, Icon icono, Object[] valores, Object valorInicial) throws HeadlessException En el siguiente botn se muestra su uso con ms parmetros. Paso 6. Procedemos a trabajar el siguiente botn Input dos. Se pide que revise y entienda cada lnea del siguiente cdigo ya que primero se preparan los datos antes de llamar a la ventana. Compara con la sintaxis de esta caja de dilogo que se present arriba. private void jbtInputDosActionPerformed(java.awt.event.ActionEvent evt) { Object[] valoresSeleccionables = {"uno","dos","tres","cuatro","cinco55"}; String clave = (String)JOptionPane.showInputDialog(null, "Seleccione una Opcion", "Lista de Valores", JOptionPane.PLAIN_MESSAGE, new ImageIcon("C:\\Archivos de programa\\" + "Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"), valoresSeleccionables,valoresSeleccionables[1]); if (clave !=null){ jlbDatoDos.setText("Datos tecleado o seleccionado: "+ clave); }else{ jbtMessage.doClick(); }

  • Dr. Hernn de la Garza Prctica 3 - 9

    Seleccione un dato de la caja combo y regrese a la ventana principal.

    Puede ver el valor seleccionado en la tercera etiqueta de la ventana principal. Paso 7. Se deja al practicante que haga funcionar el ltimo botn, que despliegue un OptionMessage y se controlen ya sean sus datos y/o botones pulsados. La sintaxis es: public static void showInputDialog(Component componentePadre, Object mensaje, String ttulo,

  • Dr. Hernn de la Garza Prctica 3 - 10

    int tipoMensaje, Icon icono, Object[] ttulosBotones, Object botnPorOmisin) throws HeadlessException Parte Dos. Cajas de Dilogo Personalizadas y Cajas de Dilogo Estndar En esta seccin mostraremos como construir una ventana personalizada por medio del uso de un JDialog, y aprovecharemos que al pulsar dos de sus botones activen los componentes JFileChooser y JColorChoser, son cajas de dilogo estndar. As entonces con esta sola ventana personalizada, probaremos la tercer categora de cajas de dilogo. Paso 8. Aadimos un JDialog a nuestro proyecto con nombre VentanaDos. La forma de aadirlo es ya conocida, hacer clic con botn derecho en la ventana de proyectos sobre la palabra Source Packages o :

    Se busca el elemento JDialog Form. Si no se encuentra escoja Other Y se desplegar la siguiente ventana:

  • Dr. Hernn de la Garza Prctica 3 - 11

    Seleccione la categora Swing GUI Forms y ah est el JDialog Form!! Recuerde darle el nombre de VentanaDos y enseguida la configuramos para que tenga los siguientes componentes:

    Son dos JLabel, un JTextField y tres JButton. Les daremos los nombres siguientes:

    jButton1 jbtNuevoArchivo jButton2 jbtNuevoColor jButton3 jbtRegresar jLabel1. jlbTitulo

  • Dr. Hernn de la Garza Prctica 3 - 12

    jLabel2. jlbArchivo jTextField1 jtfArchivo

    Paso 9. Para hacer que esta ventana se muestre se requiere aadir en el cdigo de la ventana principal una lnea de declaracin como la siguiente:

    private VentanaDos nuevaVentana;

    Puede aadirla debajo de la declaracin de la clase Ventana. Adems hay que programar el evento actionPerformed del botn Avanzar. Se escribe el siguiente cdigo para este mtodo:

    private void jbtAvanzarActionPerformed(java.awt.event.ActionEvent evt) { nuevaVentana = new VentanaDos(this,true); nuevaVentana.setVisible(true); } Nota: Observe el segundo parmetro del constructor de VentanaDos, aparece un true. Este valor indica que queremos que la ventana nueva sea MODAL, es decir que tome el control y no permita ninguna otra accin hasta que se finalice con ella. Mientras, la ventana principal contina visible dado que no indicamos que se ocultara cambiando su propiedad setVisible() a false. Al ejecutar la aplicacin y pulsar el botn avanzar se despliega nuestra ventana personalizada, que por cierto, no tiene an programado ninguno de sus botones.

  • Dr. Hernn de la Garza Prctica 3 - 13

    Paso 10. Programamos el evento de actionPerformed del botn Nuevo archivo. El cdigo har que se muestre la ventana de abrir archivo, la cual nos permite navegar por los directorios buscando el archivo deseado. Una vez seleccionado el archivo, en nuestro ejemplo, al pulsar el botn abrir de la caja de dilogo JFileChooser, haremos que se muestre el nombre del archivo seleccionado en la caja de texto de la ventana personalizada. Dar doble clic en el botn Nuevo Archivo para generar la estructura del mtodo actionPerformed de este componente, adems de que se aadi el Listener correspondiente en el cdigo del mtodo initcomponents(). Normalmente el cdigo del initComponentes est compactado y puede expandirse al hacer clic en el signo mas que aparece debajo de donde est el letrero @SuppressWarnings("unchecked"). Escriba el siguiente cdigo para el evento de actionPerformed del botn.

    private void jbtNuevoArchivoActionPerformed(java.awt.event.ActionEvent evt) { javax.swing.JFileChooser dlgAbrir = new javax.swing.JFileChooser(); int result = dlgAbrir.showOpenDialog(this); if(result == javax.swing.JFileChooser.APPROVE_OPTION){ // poner el nombre del archivo en el jtfArchivo jtfArchivo.setText(dlgAbrir.getSelectedFile().getName()); } else javax.swing.JOptionPane.showMessageDialog(null, "operacin cancelada"); } El resultado es el siguiente al ejecutarlo:

  • Dr. Hernn de la Garza Prctica 3 - 14

    Despus de pulsar el botn Abrir se actualiza la caja de texto del jtfArchivo:

    Paso 11. Pruebe a cambiar la lnea de cdigo del botn jtfArchivo.setText(dlgAbrir.getSelectedFile().getName()); por la siguiente: jtfArchivo.setText(dlgAbrir.getSelectedFile().getPath()); luego cambie int result = dlgAbrir.showOpenDialog(this); por int result = dlgAbrir.showSaveDialog(this);

  • Dr. Hernn de la Garza Prctica 3 - 15

    y reporte lo que sucede. Paso 12. A continuacin procederemos a trabajar con el botn Nuevo Color. Este botn desplegar la paleta de colores y una vez seleccionado un color, ste se queda guardado para luego ser utilizado en cambiar alguna propiedad de un componente, ya sea el foreground, backcolor o alguna otra. private void jbtNuevoColorActionPerformed(java.awt.event.ActionEvent evt) { java.awt.Color color; javax.swing.JColorChooser colorNuevo = new javax.swing.JColorChooser(); color = colorNuevo.showDialog(this, "Color", java.awt.Color.RED); if(color!=null) jlbArchivo.setForeground(color); } La pantalla desplegada al pulsar este botn es la siguiente:

    Una vez aceptado un color ste se guard provisionalmente en la variable color, para luego ser asignado su valor a la propiedad foreground de la etiqueta jlbTitulo, dando como resultado lo siguiente:

  • Dr. Hernn de la Garza Prctica 3 - 16

    Paso 13. Por ltimo nos falta programar el botn jbtRegresar, para volver a la ventana principal.

    private void jbtRegresarActionPerformed(java.awt.event.ActionEvent evt) { setVisible(false); dispose(); // TODO add your handling code here: }

    A continuacin se muestra el cdigo para las dos Formas, la principal y la ventana personalizada. Cdigo de Ventana uno import javax.swing.ImageIcon; import javax.swing.JOptionPane; public class Ventana extends javax.swing.JFrame {

  • Dr. Hernn de la Garza Prctica 3 - 17

    /** Creates new form Ventana */ public Ventana() { initComponents(); } private void jbtMessageActionPerformed(java.awt.event.ActionEvent evt) { JOptionPane.showMessageDialog(this, "Esto es un MessageDialog", "Probando Cajas", JOptionPane.OK_CANCEL_OPTION); // TODO add your handling code here: } private void jbtConfirmActionPerformed(java.awt.event.ActionEvent evt) { int resp =JOptionPane.showConfirmDialog(null, "Desea Continuar"); jlbBoton.setText("Boton pulsado: " + resp); // TODO add your handling code here: } private void jbtInputUnoActionPerformed(java.awt.event.ActionEvent evt) { String clave = JOptionPane.showInputDialog("Palabra de Paso"); jlbDatoUno.setText("Dato tecleado o seleccionado: " + clave); // TODO add your handling code here: } private void jbtInputDosActionPerformed(java.awt.event.ActionEvent evt) { Object[] valoresSeleccionables = {"uno","dos","tres","cuatro","cinco"}; String clave = (String)JOptionPane.showInputDialog(null, "Seleccione una Opcion", "Lista de Valores", JOptionPane.PLAIN_MESSAGE, new ImageIcon("C:\\Archivos de programa\\" + "Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"), valoresSeleccionables,valoresSeleccionables[1]);

  • Dr. Hernn de la Garza Prctica 3 - 18

    if (clave !=null){ jlbDatoDos.setText("Dato tecleado o seleccionado: "+ clave); }else{ jbtMessage.doClick(); } // TODO add your handling code here: } private void jbtOptionActionPerformed(java.awt.event.ActionEvent evt) { // Escribe aqu tu cdigo para hacer que se muestre esta caja } private void jbtAvanzarActionPerformed(java.awt.event.ActionEvent evt) { nuevaVentana = new VentanaDos(this,true); nuevaVentana.setVisible(true); // TODO add your handling code here: } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Ventana().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jbtMessage; private javax.swing.JButton jbtConfirm; private javax.swing.JButton jbtInputUno; private javax.swing.JButton jbtInputDos; private javax.swing.JButton jbtOption;

  • Dr. Hernn de la Garza Prctica 3 - 19

    private javax.swing.JButton jbtAvanzar; private javax.swing.JLabel jlbBoton; private javax.swing.JLabel jlbDatoUno; private javax.swing.JLabel jlbDatoDos; private javax.swing.JLabel jlbPassword; private javax.swing.JPasswordField jtfPassword; // End of variables declaration }

    Cdigo de Ventana Dos public class VentanaDos extends javax.swing.JDialog { public VentanaDos(java.awt.Frame parent, boolean modal) { super(parent, modal); setSize(200, 200); initComponents(); } private void jbtNuevoarchivoActionPerformed(java.awt.event.ActionEvent evt) { javax.swing.JFileChooser dlgAbrir = new javax.swing.JFileChooser(); int result = dlgAbrir.showOpenDialog(this); if(result == javax.swing.JFileChooser.APPROVE_OPTION){ // poner el nombre del archivo en el jtfArchivo jtfArchivo.setText(dlgAbrir.getSelectedFile().getName()); } else javax.swing.JOptionPane.showMessageDialog(null, "operacin cancelada");

  • Dr. Hernn de la Garza Prctica 3 - 20

    // TODO add your handling code here: } private void jbtRegresarActionPerformed(java.awt.event.ActionEvent evt) { setVisible(false); dispose(); // TODO add your handling code here: } private void jbtNuevoColorActionPerformed(java.awt.event.ActionEvent evt) { java.awt.Color color; javax.swing.JColorChooser colorNuevo = new javax.swing.JColorChooser(); color = colorNuevo.showDialog(this, "Color", java.awt.Color.RED); if(color!=null) jlbTitulo.setForeground(color); // TODO add your handling code here: } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { VentanaDos dialog = new VentanaDos(new javax.swing.JFrame(), true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); }

  • Dr. Hernn de la Garza Prctica 3 - 21

    // Variables declaration - do not modify private javax.swing.JButton jbtNuevoArchivo; private javax.swing.JButton jbtNuevoColor; private javax.swing.JButton jbtRegresar; private javax.swing.JLabel jlbTitulo; private javax.swing.JLabel jlbArchivo; private javax.swing.JTextField jtfArchivo; // End of variables declaration } Sugerencias Didcticas Para abordar el tema de las cajas de dilogo en todos sus tipos se requiere primero que el alumno identifique los diferentes tipos y de entre ellos, a cada una de las posibles cajas a trabajar. Para ello es conveniente presentarle ejemplos variados de su uso. Pedir a los alumnos que experimenten cambiando los parmetros de las cajas de dilogo predefinidas, desde su versin simplificada hasta la que requiera ms parmetros. Reporte del alumno (resultados) El alumno deber mostrar evidencias de haber realizado la prctica. Mostrar los resultados de las diferentes actividades adicionales que se solicitaron durante el desarrollo de la prctica. Incluir el rubro de conclusiones y recomendaciones en el reporte. Bibliografa preliminar

    1. Java The Complete Reference Eighth Edition Herbert Schildt Oracle Press 2011

    2. Java 2 Interfaces Grficas y Aplicaciones para Internet Francisco Javier Ceballos Alfaomega- RAMA 2. Edicin 2007

    3. En la pgina oficial de Java: docs.oracle.com/javase/tutorial/java/