Los cuadros de diálogo son una opción perfecta para enviar al usuario mensajes de todo tipo: de error, de precaución, de información, etc. Además, permiten mostrar uno o más botones, e incluso solicitar información al usuario en forma de cuadro de texto o combo.
Hay que distinguir los cuadros modales de los no modales, siendo los primeros los que necesitan que el usuario responda antes de continuar el programa, y los segundos los que permanecen en la pantalla ye stán disponibles para ser utilizados aunque permiten que el usuario siga trabajando con el programa.
Para crear cuadros de diálogo utilizamos el objeto JOptionPane, y en función del método a elegir, mostrará un tipo u otro. Veamos los métodos más utilizados:
showMessageDialog: es el más habitual, y despliega un cuadro de diálogo con un único botón (Aceptar). Tiene varias sobrecargas del método, es decir, podemos elegir el mismo método con dos, cuatro o cinco parámetros, que se indican a continuación:
MyIcon icon = new MyIcon();JOptionPane.showMessageDialog(Componente padre, mensaje, título, tipo de mensaje, icono);
- Componente sobre el que se abre el cuadro de diálogo (lo dejamos por defecto).
- Mensaje que se mostrará en el cuadro de diálogo.
- Título de la ventana del cuadro de diálogo.
- Entero que indica qué tipo de icono se va a mostrar, y puede ser:
- JOptionPane.DEFAULT_OPTION: no muestra icono (como PLAIN_MESSAGE).
JOptionPane.INFORMATION_MESSAGE.
JOptionPane.WARNING_MESSAGE.
JOptionPane.ERROR_MESSAGE.
JOptionPane.QUESTION_MESSAGE.- JOptionPane.PLAIN_MESSAGE: sin icono.
- Icono a elección del usuario.
showConfirmDialog: por defecto pide al usuario que confirme entre las opciones Sí y No, pero puede ser configurado para adaptarse a las necesidades del programador. Dispone de cuatro sobrecargas del método donde podemos elegir los siguientes parámetros:
JOptionPane.showConfirmDialog(Componente padre, mensaje, titulo, tipo de seleccion, tipo de mensaje, icono);
- Componente sobre el que se abre el cuadro de diálogo (lo dejamos por defecto)
- Mensaje que se mostrará en el cuadro de diálogo.
- Título de la ventana del cuadro de diálogo.
- Tipo de selección, que puede ser:
- JOptionPane.OK_CANCEL_OPTION: con dos botones.
- JOptionPane.YES_NO_OPTION: con dos botones.
- JOptionPane.YES_NO_CANCEL_OPTION: con tres botones.
- Entero que indica qué tipo de icono se va a mostrar (ver showMessageDialog).
- Icono a elección del usuario.


- showOptionDialog: despliega un cuadro de diálogo diseñado por el programador y tiene los siguientes parámetros:
JOptionPane.showOptionDialog(padre, mensaje, titulo, tipo de seleccion, tipo de mensaje, icono, opciones, valor inicial);
Componente sobre el que se abre el cuadro de diálogo (lo dejamos por defecto)- Mensaje que se mostrará en el cuadro de diálogo.
- Título de la ventana del cuadro de diálogo.
- Tipo de selección, utilizamos por defecto JOptionPane.DEFAULT_OPTION.
- Entero que indica qué tipo de icono se va a mostrar (ver showMessageDialog).
- Icono a elección del usuario.
- Opciones: le paso un array de cadenas que almacenarán el texto de los botones a mostrar.
- Valor inicial: el botón que se encuentra marcado por defecto.
- showInputDialog: despliega un cuadro de diálogo que puede almacenar, a su vez, un cuadro de texto, un combo o una lista. Veamos las diferentes opciones:
JOptionPane.showInputDialog(Componente padre, Mensaje, Titulo, Tipo De Mensaje, Icono, Array de opciones, Seleccion por defecto );
Como se puede observar, tiene las mismas opciones que en el caso anterior. Vamos a ver cómo poder utilizar cada uno tipos.
- Solamente un cuadro de texto (el texto por defecto es opcional).
JOptionPane.showInputDialog(Componente padre, mensaje, texto por defecto);
- Un cuadro de texto con las opciones habituales:
JOptionPane.showInputDialog(Componente padre, Mensaje, Titulo, Tipo de mensaje);
- Un combo desplegable con una opción marcada por defecto:
JOptionPane.showInputDialog(padre, mensaje, titulo, tipo de seleccion, tipo de mensaje, icono, opciones, valor inicial);
- Solamente un cuadro de texto (el texto por defecto es opcional).
No hay que olvidar que cuando un cuadro de diálogo devuelve un entero, sus posibles valores son:
- JOptionPane.YES_OPTION
- JOptionPane.NO_OPTION
- JOptionPane.CANCEL_OPTION
- JOptionPane.OK_OPTION
- JOptionPane.CLOSED_OPTION: el usuario cierra la ventana.
Por tanto, habría que capturar la opción introducida por el usuario, por ejemplo, de la siguiente manera:
int opcion = JOptionPane.showXXXDialog(<parametros>);
if (opcion==JOptionPane.YES_OPTION) { ...}

