lunes, septiembre 03, 2007

Confirmación y Alertas en Java: JOptioPane, showMessageDialog, showConfirmDialog, showInputDialog , showOptionDialog

La clase JOptionPane es una clase que hereda de JComponent. Ésta clase nos permitirá crear alertas o cuadros de diálogos simples para poder solicitar, o mostrar, información al usuario.
Los métodos que revisaremos en este pequeño tutorías serán:

  1. JOptionPane.showMessageDialog(…)
  2. JOptionPane.showConfirmDialog(….);
  3. JOptionPane.showInputDialog(…);
  4. JOptionPane.showOptionDialog(…);

Cada uno de estos métodos presenta una particularidad distinta pero todos ellos nos muestran una ventanita pop up que nos permitirá captar información del usuario.

  1. showMessageDialog

JOptionPane. showMessageDialog (Component componentePadre, Object mensaje, String titulo, int tipoDeMensaje)

Nos sirve para mostrar información, por ejemplo alguna alerta que queremos hacerle al usuario. Veamos cuales son los principales argumentos del método.
componentePadre: es por el ejemplo el Frame desde el cual lo llamamos. Si queremos lo podemos poner en null, que es mas o menos lo mismo.
Mensaje: es lo que queremos que diga el cuadro de dialogo.
Titulo: el titulo.
tipoDeMensaje: son constantes que le dirán a java que tipo de mensaje queremos mostrar. De acuerdo a esto seran los iconos que se mostraran en el cuadro de dialogo. Las opciones son

  • ERROR_MESSAGE
  • INFORMATION_MESSAGE
  • WARNING_MESSAGE
  • QUESTION_MESSAGE
  • PLAIN_MESSAGE

Si quisiéramos mostrar un icono personalizado, podemos agregarlo al final como un argumento más.
Ejemplo:

JOptionPane.showMessageDialog(null,"Acceso Denegado","Error",
JOptionPane.ERROR_MESSAGE);

  1. showConfirmDialog

Éste método sirve para pedirle al usuario una confirmación. Por ejemplo una confirmación de salida del sistema

Int respuesta =JOptionPane. showMessageDialog (Component componentePadre, Object mensaje, String titulo, int tipoDeOpcion);

El anterior es la versión corta del los argumentos del método. La versión larga incluye el tipo de mensaje y el icono, por si queremos personalizarlo.
Los argumentos son idénticos a los del método anterior. Excepto por el tipo de opción, que es otra constante y los valores pueden ser:

  • DEFAULT_OPTION
  • YES_NO_OPTION
  • YES_NO_CANCEL_OPTION
  • OK_CANCEL_OPTION

Como vemos el método devuelve una un entero que nos permitirá captar cual es la opción elegida por el usuario. Los valores serán 0 para Si, 1 para No, 2 para Cancelar y -1 para el cierre de la ventana. Así podremos preguntar cual es el valor devuelto y realizar la acción que deseamos.
Ejemplo

int i =JOptionPane.showConfirmDialog(this,"¿Realmente Desea Salir de Hola Swing?","Confirmar Salida",JOptionPane.YES_NO_OPTION);
if(i= =0){
System.exit(0);
}

  1. ShowInputDialog

Este método nos muestra una ventana donde podremos insertar una String. Por ejemplo cuando queremos que el usuario inserte su nombre. La versión corta del método es

String respuesta = JOptionPane.showInputDialog(Object mensaje)

Este método devolverá una String para poderla utilizar después. La versión larga de los argumentos del método es similar a los anteriores.
Ejemplo:

String nombre =JOptionPane.showInputDialog("Inserte su Nombre");
this.lbl_nombre.setText(nombre);

También podemos crear un cuadro de dialogo que contenga un combo con las opciones predeterminadas que le queremos dar al usuario.
Ejem:

Object[] valoresPocibles = {"Pedro", "Juan", "Carlos" };
Object jefe = JOptionPane.showInputDialog(null,
"Seleccione cual es su Jefe Inmediato", "Seleccionar Jefe",
JOptionPane. QUESTION_MESSAGE, null,
valoresPocibles,
valoresPocibles[0]);
this.lbl_jefe.setText((String)jefe);

El array de valores posibles nos muestra en un combo cuales serán los jefes que podemos mostrar. El último argumento del método nos muestra cual será la opción seleccionada por defecto

showOptionDialog

Con este método podemos crear cuadros de diálogos con botones personalizados. Esta bueno para darle un toque personal a los cuadros de dialogo
El método tiene la forma:

Int res = JOptionPane.showOptionDialog(Component componentePadre, Object mensaje, String titulo, int tipoDeOpcion, int tipoMensaje, Icon icono, Object[] botones, Object botonDefault)

Aquí lo único que varia con el resto es el array de botones que vamos a tener, debemos destacar que no hace falta que creemos botones, solo tenemos que poner cual será el texto que saldrá en el.

Object[] botones = {"Si dale va a estar bueno", "No?... buuu" };
int i=JOptionPane.showOptionDialog(null, "¿Queres salir a Bailar esta Noche?", "Sita",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, botones, botones[0]);
System.out.println(i);

Después podemos tomar la respuesta como lo hacíamos con el confirmDialog.
Bueno hasta la próxima, esto es lo más importante en los mensajes o alertas.

26 comentarios:

Anónimo dijo...

Perfecto, justo lo que necesitaba y bien explicado. Pero... te falto mencionar que para poder utilizar estas opciones hay primero que llamar a... la librería o clase.

import javax.swing.JOptionPane;

Lo digo yo que soy nuevo.

aro dijo...

Sep. Se da por entendido. Perdón.
Siempre que uses una clase la tenés que importar primero. No tiene nada de malo ser nuevo, por algun lado se comienza y siempre somos nuevos, por que siempre hay algo para aprender.
Espero haberte sido de ayuda. Saludos.

Anónimo dijo...

Muchas gracias amigo por esta valiosisima información, la estaba buscando desde hace rato!!!
Salu2

aro dijo...

de nada amigo! un abrazo

Anónimo dijo...

muy util, gracias

aro dijo...

;)

Anónimo dijo...

Solo tengo una duda. Para declarale a un boton el valor, por ejemplo, 0 para Si , 1 para No, y -1 para Cancelar, eso como c hace. Gracias d antemano.

Anónimo dijo...

Saludos! hay alguna forma de cambiar el nombre de la ventana de un showInputdialog? es para que no aparezca siempre la ventana con el nombre Input, Gracias

Anónimo dijo...

Saludos! Muy bien explicado!

Alejandr. dijo...

buena la explicacion yo estoy haciendo uso de tu explicacion
me gustria poder intercambiar temas relacionados mi correo es alejandro_jhong@hotmail.com me gustarai saber mas de swing

gracias..

Ana dijo...

Excelente!! muy bien explicado, me ha servido de mucho.
Saludos

aro dijo...

thx Ana :)

miguel dijo...

Gracias BRO!!! me sirvió de mucho

aro dijo...

u r welcome! me alegro de que el aporte te haya servido! saludos

Alberto dijo...

hay alguna forma de mostrar una ventana de ese tipo pero que en vez de que tenga botones para aceptar o cancelar o esas cosas, desaparezca despues de no se 5 segundos me urge muchas gracias por la respuesta

aro dijo...

ese tipo de comportamiento, lo tendria una venta que tu mismo hicieras, existen por ahi codigo de todo tipo de ventanas, con o sin bordes, con botones, etc. Lo de que desaparezca seria un timer que dispare el evento. Saludos

Anónimo dijo...

Muchas gracias por la informacion. Muy claro todo!!! :)

aro dijo...

you are welcome! :)

Darwin Omar Guevara Diaz dijo...

Gracias por el aporte .... :D

Anónimo dijo...

You are un groso!

Antonella/Hugo Legua Benavides dijo...

No estoy de acuerdo con tu top pero en fin un hobbie hecho profesión es lo mejor por otro lado para anónimo te dejo un código para poder hacer lo que pides:


int n = JOptionPane.showConfirmDialog(this, "¿Realmente Desea Salir de Hola Swing?", "Confirmar Salida", JOptionPane.YES_NO_OPTION);
// YES OPTION CLICKED
if (n == 0) {
System.out.println("YES Clicked");
}

// NO OPTION CLICKED
if (n == 1) {
System.out.println("NO Clicked");
}

// CROSS CLICKED
if (n == -1) {
System.out.println("Cross Clicked");
}

Antonella/Hugo Legua Benavides dijo...

PSD:
Me sirvió lo de los íconos Gracias y BENDICIONES!!!!

aro dijo...

Ja, puede ser... hay dias en los que los siento asi... y otros no tanto jej. Un abrazo y a seguir codificando :)

Anónimo dijo...

Genial che, muchas gracias

Anónimo dijo...

Gracias... Me sirvio de mucho... :D

AleURU dijo...

Muy bueno