Cajas de Diálogo - JOptionPane

Una caja de diálogo esa pequena ventanita que nos avisa de algo, generalmente un problema nos da a elegir entre opciones, etc


La clase encargada de realizar estas cajas de diálogo es JOptionPane...

Clase JOptionPane

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JOptionPane

JOptionPane hace que sea fácil que aparezca un cuadro de diálogo estándar que solicite a los usuarios un valor o les informe de algo. Mientras que la clase JOptionPane puede aparecer compleja debido al gran número de métodos, casi todos los usos de esta clase son de una línea de código y llama a uno de los métodos estaticos de la forma showXxxDialog que se muestra a continuación:

Método Descripción
showConfirmDialog Pide una pregunta de confirmación, como sí / no / cancelar.
showInputDialog Preguntar por alguna entrada.
showMessageDialog Informa al usuario acerca de algo que ha sucedido.
showOptionDialog La Unificación de los tres anteriores.

ConfirmDialog

SobreCargas:

  • showConfirmDialog(Component parentComponent, Object message)
  • showConfirmDialog(Component parentComponent, Object message, String title, int optionType)
  • showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType)
  • showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon)

Como vemos son 2 parámetros fijos y el siguiente configura un nuevo valor.

  • Component parentComponent
    • Determina el marco en el que se muestra el cuadro de diálogo; Si es "NULL", o si el parentComponent no tiene marco, se utiliza un marco predeterminado.
  • Object message
    • Es el Mensaje a mostrar.
  • String title
    • El 3er parámetro es un string utlizado como titulo. "Seleccione una opción" es el titulo default.
  • int optionType
    • Configura los botones que aparecen en el marco entre las variables de la clase JOptionPane:
      • YES_NO_OPTION, 2 botones Si y No
      • YES_NO_CANCEL_OPTION, 3 botones Si, No y Cancelar
      • OK_CANCEL_OPTION, 2 botones Ok y Cancelar (Default)
  • int messageType
    • Configura el tipo de mensaje principalmente para determinar el icono, usa variables de la clase JOptionPane, se puede usar:
      • ERROR_MESSAGE
      • INFORMATION_MESSAGE
      • WARNING_MESSAGE
      • QUESTION_MESSAGE (Default)
      • PLAIN_MESSAGE
  • Icon icon
    • También podemos configurar nuestro propio icono a mostrar con ImageIcon.


  1. package com;
  2. import javax.swing.ImageIcon;
  3. import javax.swing.JOptionPane;
  4. public class CajadeDialogo {
  5.     public static void main(String[] args) {
  6.         ImageIcon icono = new ImageIcon("src/com/logopeque.png");
  7.        
  8.         JOptionPane.showConfirmDialog(null, "Mi Mensaje a Mostrar");
  9.         JOptionPane.showConfirmDialog(null, "Mi Mensaje a Mostrar",
  10.                 "Mi titulo personalizado", JOptionPane.OK_CANCEL_OPTION);
  11.         JOptionPane.showConfirmDialog(null, "Mi Mensaje a Mostrar",
  12.                 "Mi titulo personalizado", JOptionPane.OK_CANCEL_OPTION,
  13.                 JOptionPane.WARNING_MESSAGE);
  14.         JOptionPane.showConfirmDialog(null, "Mi Mensaje a Mostrar",
  15.             "Mi titulo personalizado", JOptionPane.OK_CANCEL_OPTION,
  16.             JOptionPane.WARNING_MESSAGE, icono);
  17.     }
  18. }

Utilice una imagen que tenia previamente, y las 4 sobrecarga del método showConfirmDialog donde se puede ver cuadro a cuadro cuales son las posibildades que te da para configurar:

  1. Creamos el cuadro de mensaje básico, sin componente padre y un mensaje propio.
  2. Modificamos el titulo y los botones.
  3. El "tipo" de mensaje y se cambio el icono.
  4. Agregamos nuestro propio logo

InputDialog

SobreCargas:

  • showInputDialog(Object message)
  • showInputDialog(Object message, Object initialSelectionValue)
  • showInputDialog(Component parentComponent, Object message)
  • showInputDialog(Component parentComponent, Object message, Object initialSelectionValue)
  • showInputDialog(Component parentComponent, Object message, String title, int messageType)
  • showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)
  • Component parentComponent
    • Determina el marco en el que se muestra el cuadro de diálogo; Si es "NULL", o si el parentComponent no tiene marco, se utiliza un marco predeterminado.
  • Object message
    • Es el Mensaje a mostrar.
  • Object initialSelectionValue
    • Es el valor utilizado para inicializar el campo de entrada
  • String title
    • Titulo del marco.
  • int messageType
    • Configura el tipo de mensaje principalmente para determinar el icono, usa variables de la clase JOptionPane, se puede usar:
      • ERROR_MESSAGE
      • INFORMATION_MESSAGE
      • WARNING_MESSAGE
      • QUESTION_MESSAGE (Default)
      • PLAIN_MESSAGE
  • Icon icon
    • También podemos configurar nuestro propio icono a mostrar con ImageIcon.
  • Object[] selectionValues
    • Un array que nos da la posibilidad de elegir entre ellos.


  1. package com;
  2. import javax.swing.ImageIcon;
  3. import javax.swing.JOptionPane;
  4. public class CajadeDialogo {
  5.     public static void main(String[] args) {
  6.         ImageIcon icono = new ImageIcon("src/com/logopeque.png");
  7.         String[] arreglo = {"ConfirmDialog", "InputDialog", "MessageDialog", "OptionDialog"};
  8.        
  9.         JOptionPane.showInputDialog("Mi Mensaje a Mostrar");
  10.         JOptionPane.showInputDialog("Mi Mensaje a Mostrar", "Escribe");
  11.        
  12.         JOptionPane.showInputDialog(null, "Mi Mensaje a Mostrar");
  13.         JOptionPane.showInputDialog(null, "Mi Mensaje a Mostrar", "Escribe...");
  14.         JOptionPane.showInputDialog(null, "Mi Mensaje a Mostrar",
  15.                 "Mi titulo personalizado", JOptionPane.OK_CANCEL_OPTION);
  16.        
  17.         JOptionPane.showInputDialog(null, "Mi Mensaje a Mostrar",
  18.                 "Mi titulo personalizado", JOptionPane.OK_CANCEL_OPTION,
  19.                 icono, arreglo, "Escribe...");
  20.     }
  21. }

Los primeros 2 son iguales a los siguientes porque los ultimos pueden pertenecer a un componente dentro de una aplicación. Los 2 últimos nos permite modificar algunas cosas más:


MessageDialog

SobreCargas:

  • showMessageDialog(Component parentComponent, Object message)
  • showMessageDialog(Component parentComponent, Object message, String title, int messageType)
  • showMessageDialog(Component parentComponent, Object message, String title, int messageType, Icon icon)
  • Component parentComponent
    • Determina el marco en el que se muestra el cuadro de diálogo; Si es "NULL", o si el parentComponent no tiene marco, se utiliza un marco predeterminado.
  • Object message
    • Es el Mensaje a mostrar.
  • String title
    • El 3er parámetro es un string utlizado como titulo. "Seleccione una opción" es el titulo default.
  • int messageType
    • Configura el tipo de mensaje principalmente para determinar el icono, usa variables de la clase JOptionPane, se puede usar:
      • ERROR_MESSAGE
      • INFORMATION_MESSAGE
      • WARNING_MESSAGE
      • QUESTION_MESSAGE (Default)
      • PLAIN_MESSAGE
  • Icon icon
    • También podemos configurar nuestro propio icono a mostrar con ImageIcon.


  1. package com;
  2. import javax.swing.ImageIcon;
  3. import javax.swing.JOptionPane;
  4. public class CajadeDialogo {
  5.     public static void main(String[] args) {
  6.         ImageIcon icono = new ImageIcon("src/com/logopeque.png");
  7.        
  8.         JOptionPane.showMessageDialog(null, "Mi Mensaje a Mostrar");
  9.         JOptionPane.showMessageDialog(null, "Mi Mensaje a Mostrar",
  10.                 "Mi titulo", JOptionPane.ERROR_MESSAGE);
  11.         JOptionPane.showMessageDialog(null, "Mi Mensaje a Mostrar",
  12.                 "Mi titulo", JOptionPane.ERROR_MESSAGE, icono);
  13.     }
  14. }


OptionDialog

Único Método:

  • showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)
  • Component parentComponent
    • Determina el marco en el que se muestra el cuadro de diálogo; Si es "NULL", o si el parentComponent no tiene marco, se utiliza un marco predeterminado.
  • Object message
    • Es el Mensaje a mostrar.
  • String title
    • El 3er parámetro es un string utlizado como titulo. "Seleccione una opción" es el titulo default.
  • int optionType
    • Configura los botones que aparecen en el marco entre las variables de la clase JOptionPane:
      • YES_NO_OPTION, 2 botones Si y No
      • YES_NO_CANCEL_OPTION, 3 botones Si, No y Cancelar
      • OK_CANCEL_OPTION, 2 botones Ok y Cancelar (Default)
  • int messageType
    • Configura el tipo de mensaje principalmente para determinar el icono, usa variables de la clase JOptionPane, se puede usar:
      • ERROR_MESSAGE
      • INFORMATION_MESSAGE
      • WARNING_MESSAGE
      • QUESTION_MESSAGE (Default)
      • PLAIN_MESSAGE
  • Icon icon
    • También podemos configurar nuestro propio icono a mostrar con ImageIcon.
  • Object[] options
    • Un array de objetos que indican las posibles opciones que el usuario puede hacer; si los objetos son componentes, se muestran adecuadamente; Los objetos que no son String se representan con sus métodos toString; Este parámetro puede ser nulo, de ser asi las opciones son determinadas por el LookAndFeel
  • Object initialValue
    • el objeto que representa la selección predeterminada para el diálogo; sólo tiene sentido si se utilizan las opciones; puede ser nulo


  1. package com;
  2. import javax.swing.ImageIcon;
  3. import javax.swing.JOptionPane;
  4. public class CajadeDialogo {
  5.     public static void main(String[] args) {
  6.         ImageIcon icono = new ImageIcon("src/com/logopeque.png");
  7.         String[] arreglo = {"ConfirmDialog", "InputDialog", "MesageDialog", "OptionDialog"};
  8.        
  9.         JOptionPane.showOptionDialog(null, "Mi Mensaje a Mostrar", "Mi Titulo",
  10.                 JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, icono,
  11.                 arreglo, "Option");
  12.     }
  13. }


Recoger Información

Desde luego por ahora lo importante es crear estas cajas de dialogo pero desués no interesará interpretar esta información. Por ahora vamos a mostrar por pantalla todo lo que elijamos.
Para eso hay que saber que tipo de retorno de los métodos:

  • public static int showConfirmDialog
    • Nos devuelve un entero que será el valor del botón cliackeado:
      • JOptionPane.YES_NO_OPTION = 0
      • JOptionPane.YES_NO_CANCEL_OPTION = 1
      • JOptionPane.OK_CANCEL_OPTION = 2

  • public static String showInputDialog
    • Nos devuelve el String que el usuario ingrese por teclado.

  • public static void showMessageDialog
    • No tiene retorno porque solo tiene un botón el de aceptar.

  • public static int showOptionDialog
    • Otro entero que es el valor de los botones o el indice si le pasamos un array de objetos.

Ahora podemos guardar en una variable el resultado de nuestra caja de dialogo.

Por ejemplo:

  • int num = JOptionPane.showConfirmDialog(null, "Mi Mensaje a Mostrar");

  • String nombre = JOptionPane.showInputDialog("Escribe tu nombre:");

  • int numero = JOptionPane.showOptionDialog(null, "Mi Mensaje a Mostrar", "Mi Titulo", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, icono, arreglo, "Opcion"

Y ya con esa variable podemos trabajar como siempre, imprimiendola por pantalla, guardarla en un array, etc.

6 comentarios:


  1. int numero = JOptionPane.showOptionDialog(null, "Mi Mensaje a Mostrar", "Mi Titulo", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, icono, arreglo, "Opcion"

    este codigo sin icono
    como ago?

    ResponderEliminar
  2. Bueno depende de que icono estemos hablando(El de el titulo o el del asunto del mensaje)

    La firma dle metodo asi(Tiene 8 parametros)

    public static int showOptionDialog(Component parentComponent, //1
    Object message, //2
    String title, //3
    int optionType, //4
    int messageType, //5
    Icon icon, //6
    Object[] options, //7
    Object initialValue) //8

    Para desactivar el icono del titulo basta con poner el objeto como nulo icon(6), pero para el caso del asunto del mensaje hay que poner -1 en el parametro messageType (5)

    salu2

    ResponderEliminar
  3. como le puedo poner color de fondo a los mensajes emergentes???

    ResponderEliminar
    Respuestas
    1. Con javax.swing.UIManager

      UIManager UI = new UIManager();
      UI.put("OptionPane.background", Color.RED);
      UI.put("Panel.background", Color.GREEN);

      JOptionPane.showMessageDialog(null,"Texto a mostrar","Titulo",JOptionPane.INFORMATION_MESSAGE);

      Eliminar
  4. y como le ago para ponerle una imagen de mi computadora al cuadro

    ResponderEliminar
  5. Si quiero que el cuadro aparezca sobre un jframe

    ResponderEliminar