Uso de ventanas con JOptionPane

Es un mensaje tipo modal que te permite mostrar información sean errores, advertencias, entre otros, también permite ingresar mensajes; y ¿cómo no? realizar confirmaciones según una interrogante y así continuar con otros procesos.

Para ello vas a utilizar la clase javax.swing la cual contiene la librería de interfaz gráfica de usuario, para poder utilizarla debemos de importarlo de la siguiente manera:

   import javax.swing.JOptionPane; 

Mencionaré que entre una de sus características del JOptionPane es la de bloquear (modo modal) toda la aplicación siendo inútil realizar cualquier acción mientras este este se encuentre activo; la única manera de volver a tener el control es cerrando la ventana del JOptionPane para recuperar el control.

¿Para qué sirve?

Como ya lo había mencionado líneas arriba, sirve para mostrar mensajes, entre errores, y advertencias de algún mal funcionamiento e incluso de manera informativa, suelen también utilizarse para el ingreso de datos o mensajes, y sobre todo confirmaciones para realizar o no una acción.

Ventajas y Desventajas

Entre las ventajas tenemos que es fácil, versátil y sobre todo manipulable para realizar ventanas informativas, confirmaciones e ingresos. Sin embargo no podemos agregar componentes de manera directa en él como botones, listas, etc. Siendo este una de sus grandes desventajas.

Métodos

Mencionaré a cada uno de ellos y las funciones que cumple cada método. Comenzaré mencionando que estos métodos necesitan argumentos unos más que otros, entre ellos tenemos el siguiente:

   Component parentComponent: 

A partir de este componente, se intentará determinar cuál es la ventana que debe hacer de padre del JOptionPane. Se puede pasar null, pero conviene pasar, por ejemplo, el botón o componente desde el cual se lanza la acción que provoca que se visualice el JOptionPane. De esta manera, la ventana de aviso se visualizará sobre el botón o componente y no se podrá ir detrás del mismo si hacemos clic en otro sitio activando así el modo modal.

   Object message: 

Es el contenido del mensaje, normalmente suele ser un String, también podemos utilizar el tipo Object.

   String title: 

El título que mostrará la ventana.

   int optionType: 

Un entero indicando que opciones queremos que tenga la ventana. Los posibles valores son las constantes definidas en JOptionPane:
   
   DEFAULT_OPTION.
   YES_NO_OPTION.
   YES_NO_CANCEL_OPTION.
   OK_CANCEL_OPTION.

Los valores que pueden optar para las opciones anteriores son:

DEFAULT_OPTION:-1
YES_NO_OPTION:0
YES_NO_CANCEL_OPTION:1
OK_CANCEL_OPTION:2

   int messageType: 

Un entero para indicar qué tipo de mensaje estamos mostrando. Este tipo servirá para que se determine qué icono mostrar. Los posibles valores son constantes definidas en JOptionPane:
   
   ERROR_MESSAGE.
   INFORMATION_MESSAGE.
   WARNING_MESSAGE.
   QUESTION_MESSAGE.
   PLAIN_MESSAGE. 

Los valores que pueden optar para las opciones anteriores son:

ERROR_MESSAGE:0
INFORMATION_MESSAGE:1
WARNING_MESSAGE:2
QUESTION_MESSAGE:3
PLAIN_MESSAGE:-1

Para colocar el ícono con (Icon):

Un icono para mostrar. Si ponemos null, saldrá el icono por defecto según el argumento messageType.

   Object[] options: 

Un array de objetos que determinan las posibles opciones. Si los objetos son componentes visuales, aparecerán tal cuales como opciones. Si son String, el JOptionPane pondrá tantos botones como String. Si son cualquier otra cosa, se les tratará como String llamando al método toString(). Si se pasa null, saldrán los botones por defecto que se hayan indicado en optionType.

Para agregar botones podemos hacerlo de la siguiente manera:

   new Object[] {“SI”, “NO”}; 

Cada separación entre las comillas dentro de las llaves, serán interpretadas como botones de la ventana, en este caso tuviéramos dos botones uno que diga SI y el otro que diga NO. El primer botón tendrán el valor 0 y el segundo botón tendrá el valor 1, según las posiciones del array.

   Object initialValue:

Selección por defecto. Debe ser uno de los Object que hayamos pasado en el argumento options. Se puede pasar null.

La llamada a JOptionPane.showOptionDialog() devuelve un entero que representa la opción que ha seleccionado el usuario. La primera de las opciones del array es la posición cero. Si se cierra la ventana con la cruz de la esquina superior derecha, el método devolverá -1.

Fuente: Chuwiki

Sintaxis del método showOptionDialog y los argumentos que necesita.

   showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue);


Reemplazando cada uno de los argumentos tendría esta forma.

   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", " showOptionDialog()", -1, -1, null, null,  null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

Como también podría ser reemplazando cada uno de los valores anteriormente mencionados:

JOptionPane.PLAIN_MESSAGE:

   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", " showOptionDialog()",JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, null,  null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

Como resultado tenemos algo similar al anterior pues es claro que lo es, solo he cambiado los valores según la tabla de equivalencia presentada líneas más arriba.

JOptionPane.ERROR_MESSAGE

   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", " showOptionDialog()",JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, null,  null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

JOptionPane.INFORMATION_MESSAGE

   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", " showOptionDialog()",JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null,  null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

JOptionPane.WARNING_MESSAGE

   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", " showOptionDialog()",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, null,  null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

JOptionPane.QUESTION_MESSAGE

   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", " showOptionDialog()",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, null,  null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí
 
También puedes personalizar tu JOptionPane como agregar íconos dentro de ellas cambiando el argumento por el código respectivo, como por ejemplo las siguientes imágenes muestran distintos iconos.

   //Llamado al getClass() en un método static
   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", "showOptionDialog()", -1, -1, new ImageIcon(Anexo01.class.getClass().getResource("/img/candado.png")), null, null);

   //Llamado al getClass() en un método non - static
   JOptionPane.showOptionDialog(null, "Bienvenido a Tu Café Java", "showOptionDialog()", -1, -1, new ImageIcon(getClass().getResource("/img/candado.png")), null, null);

Como resultado tenemos la siguiente imagen:

 Para descargar el código clic aquí

   //Llamado al getClass() en un método static
   JOptionPane.showOptionDialog(null, "¿Está seguro que desea salir?", "showOptionDialog()", -1, -1, new ImageIcon(Anexo02.class.getClass().getResource("/img/cerrar.png")), new Object[] {"SI", "NO"}, null);

   //Llamado al getClass() en un método non - static
   JOptionPane.showOptionDialog(null, "¿Está seguro que desea salir?", "showOptionDialog()", -1, -1, new ImageIcon(getClass().getResource("/img/cerrar.png")), new Object[] {"SI", "NO"}, null);

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

En conclusión en el JOptionDialog tenemos a disponibilidad los cambios en la estructura de la ventana de manera específica, siendo fácil y práctico lograr la apariencia deseada sin ningún inconveniente.

A partir de acá en adelante será más sencillo comprender, a través de los ejemplos que te permitirán entender rápidamente los demás métodos.

El método showMessageDialog();

Es el método que permite mostrar un mensaje en la ventana, este método tiene tres formas de ser llamado cada una varía según la cantidad de argumentos a enviar. A continuación te dejo los ejemplos:

Primer llamado con 2 argumentos (parentComponent):

   //Con 2 argumentos utilizando el parentComponent
   JOptionPane.showMessageDialog(null, "Bienvenido a Tu Café Java");

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Segundo llamado con 4 argumentos (parentComponent):

   //Con 4 argumentos utilizando el parentComponent
   JOptionPane.showMessageDialog(null, "Bienvenido a Tu Café Java", "Tu Café Java", 2);

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Tercer llamado con 5 argumentos (parentComponent):

   //Con 5 argumentos utilizando el parentComponent
   //Llamado al getClass() en un método static
   JOptionPane.showMessageDialog(null, "Bienvenido a Tu Café Java", "Tu Café Java", 1, new ImageIcon(Ejemplo03.class.getClass().getResource("/img/java.png")));

   //Con 5 argumentos utilizando el parentComponent
   //Llamado al getClass() en un método non - static
   JOptionPane.showMessageDialog(null, "Bienvenido a Tu Café Java", "Tu Café Java", 1, new javax.swing.ImageIcon(getClass().getResource("/img/java.png")));

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí

El método showInputDialog();

Es el método que permite ingresar un valor de tipo String, este método tiene seis formas de ser llamado cada una varía según la cantidad de argumentos a enviar. A continuación te dejo los ejemplos:

Recuerda que para el valor que escribas dentro del campo de texto será recibido con una variable que debes declarar como tipo String.

Primer llamado con 1 argumento:

   //Con 1 argumento solamente muestra el mensaje de lo que se pide sin parentComponent   
   String mensaje = JOptionPane.showInputDialog("Bienvenido a Tu Café Java");

Como resultado tenemos la siguiente imagen:
 

Para descargar el código clic aquí

Segundo llamado con 2 argumentos (parentComponent):

   //Con 2 argumentos utilizando el parentComponent
   String mensaje = JOptionPane.showInputDialog(null, "Bienvenido a Tu Café Java");

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Tercer llamado con 2 argumentos:

   //Con 2 argumentos sin utilizar el parentComponent, mostrará una frase dentro del campo de texto
   String mensaje = JOptionPane.showInputDialog("Ingrese un nombre que empiece con \"T\"", "Tu Café Java");

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí


Cuarto llamado con 3 argumentos (parentComponent):

   //Con 3 argumentos utilizando el parentComponent
   String mensaje = JOptionPane.showInputDialog(null, "Ingrese un nombre que empiece con \"T\"", "Tu Café Java");

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí

Quinto llamado con 4 argumentos (parentComponent):

   //Con 4 argumentos utilizando el parentComponent
   String mensaje = JOptionPane.showInputDialog(null, "Ingrese su dirección", "Tu Café Java", JOptionPane.INFORMATION_MESSAGE);

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí


Sexto llamado con 7 argumentos (parentComponent):

   //Con 7 argumentos utilizando el parentComponent
   //Llamado al getClass() en un método static
   Object objeto = JOptionPane.showInputDialog(null, "Seleccione el año de su nacimiento", "Tu Café Java", JOptionPane.QUESTION_MESSAGE, new ImageIcon(Ejemplo06.class.getClass().getResource("/img/java.png")), new Object[]{"1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999", "2000"}, "1999");
   if(objeto != null) {
      String mensaje = objeto.toString(); //Convertimos el Object en un String
   }

   //Con 7 argumentos
   //Llamado al getClass() en un método non - static
   Object objeto = JOptionPane.showInputDialog(null, "Seleccione el año de su nacimiento", "Tu Café Java", JOptionPane.QUESTION_MESSAGE, new ImageIcon(getClass().getResource("/img/java.png")), new Object[]{"1989", "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999", "2000"}, "1999");
   if(objeto != null) {
      String mensaje = objeto.toString(); //Convertimos el Object en un String
   } 

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

El método showConfirmDialog();

Es el método que permite realizar confirmaciones para realizar o no un proceso. Este método tiene cuatro formas de ser llamado cada una varía según la cantidad de argumentos a enviar. A continuación te dejo los ejemplos:

Para ello debes utilizar una variable del tipo int para recepcionar el resultado.

Primer llamado con 2 argumentos (parentComponent):

   //Con 2 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showConfirmDialog(null, "¿Qué opción elegirá?");

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí

Segundo llamado con 4 argumentos (parentComponent):

   //Con 4 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showConfirmDialog(null, "¿Está seguro que desea terminar?", "Confirmación", JOptionPane.CANCEL_OPTION);

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Tercer llamado con 4 argumentos (parentComponent):

   //Con 4 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showConfirmDialog(null, "¿Deseas más ejemplos para el blog?", "Aprobación", JOptionPane.YES_NO_OPTION, JOptionPane.CLOSED_OPTION);

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Cuarto llamado con 6 argumentos (parentComponent):

   //Con 6 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showConfirmDialog(null, "¿Desea cerrar la aplicación?", "Cerrar Sesión", JOptionPane.OK_OPTION, JOptionPane.CLOSED_OPTION, new ImageIcon(getClass().getResource("/img/apagar.png")));

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

También existen tres métodos más que funcionan para la ventana JInternalFrame desde donde pueden llamarse. A diferencia de los anteriores sólo bloquea la aplicación de forma parcial, es decir sólo impide realizar acciones a la ventana que lo llamó a la ventana. Los métodos son los siguientes:

El método showInternalMessageDialog();

Primer llamado con 2 argumentos (parentComponent):
   
   //Con 2 argumentos utilizando el parentComponent
   JOptionPane.showInternalMessageDialog(botonMensaje, "Bienvenido a Tu Café Java");   

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Segundo llamado con 4 argumentos (parentComponent):
      
   //Con 4 argumentos utilizando el parentComponent 
   JOptionPane.showInternalMessageDialog(botonMensaje, "Este es un mensaje de Error", "Tu Café Java", JOptionPane.WARNING_MESSAGE); 

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Tercer llamado con 5 argumentos (parentComponent):
   
   //Con 5 argumentos utilizando el parentComponent
   JOptionPane.showInternalMessageDialog(botonMensaje, "Mensaje con ícono personalizado", "Tu Café Java", JOptionPane.INFORMATION_MESSAGE, new ImageIcon(getClass().getResource("/img/mensaje.png"))); 

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

El método showInternalInputDialog();

Primer llamado con 2 argumentos (parentComponent):
     
   //Con 2 argumentos utilizando el parentComponent 
   String mensaje = JOptionPane.showInternalInputDialog(botonMensaje, "Ingresa tu(s) nombre(s):"); 

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí

Segundo llamado con 4 argumentos (parentComponent):
   
   //Con 4 argumentos utilizando el parentComponent
   String mensaje = JOptionPane.showInternalInputDialog(botonMensaje, "¿Cuál es tu expectativa salarial?", "Tu Café Java", JOptionPane.QUESTION_MESSAGE); 

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Tercer llamado con 7 argumentos (parentComponent):
   
   //Con 7 argumentos utilizando el parentComponent
   Object objeto = JOptionPane.showInternalInputDialog(botonMensaje, "¿Qué imagen puedes ver al lado izquierdo?", "Tu Café Java", JOptionPane.QUESTION_MESSAGE, new ImageIcon(getClass().getResource("/img/pez.png")), new Object[]{"SELECCIONE UNA OPCIÓN","PEZ", "GATO", "PERRO", "CABALLO"}, null); //A diferencia de los dos anteriores este recibe un tipo de dato Object
    
   if(objeto != null) {
      String mensaje = objeto.toString(); //Convertimos el Object en un String
   } 

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí

El método showInternalConfirmDialog();

Primer llamado con 2 argumentos (parentComponent):
   
   //Con 2 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showInternalConfirmDialog(botonMensaje, "¿Está seguro que desea continuar?"); 

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Segundo llamado con 4 argumentos (parentComponent):
   
   //Con 4 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showInternalConfirmDialog(botonMensaje, "¿Tienes hijos?", "Tu Café Java", JOptionPane.YES_OPTION); 

Como resultado tenemos la siguiente imagen:



Para descargar el código clic aquí

Tercer llamado con 5 argumentos (parentComponent):
   
   //Con 5 argumentos utilizando el parentComponent
   Java", JOptionPane.OK_OPTION, JOptionPane.WARNING_MESSAGE); 

Como resultado tenemos la siguiente imagen:


Para descargar el código clic aquí

Cuarto llamado con 6 argumentos (parentComponent):
   
   //Con 6 argumentos utilizando el parentComponent
   int respuesta = JOptionPane.showInternalConfirmDialog(botonMensaje, "¿Tiene color azul la imagen?", "Tu Café Java", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, new ImageIcon(getClass().getResource("/img/balon.png"))); 

Como resultado tenemos la siguiente imagen:

Para descargar el código clic aquí

Espero haya sido de tu interés estos ejemplos, lo he detallado para un mejor entendimiento, no te olvides dejar tu comentario, compartirlo con tus amistades en redes sociales.

Comentarios

Entradas populares de este blog

Practica de Diagrama de Flujo Intermedio - Resueltos

Personaliza tus reportes PDF desde PHP con la librería FPDF

Práctica de Diagrama de Flujo Nivel Intermedio - Resueltos (Parte II)