lunes, 4 de junio de 2012

JOptionPane


JOptionPane.showOptionDialog()

Tenemos un método JOptionPane.showOptionDialog() que nos muestra la ventana más configurable de todas, en ella debemos definir todos los botones que lleva. De hecho, las demás ventanas disponibles con JOptionPane se construyen a partir de esta. Por ello, al método debemos pasarle muchos parámetros:

■  parentComponent: A partir de este componente, se intentará determinar cual es la ventana que debe hacer de padre del JOptionPane. Se puede pasar null, pero conviene pasar, por ejemplo, el botón 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 y no se podrá ir detrás del mismo si hacemos click en otro sitio.

■  message: El mensaje a mostrar, habitualmente un String, aunque vale cualquier Object cuyo método toString() devuelva algo con sentido.

■  title: El título para la ventana.

  optionType: Un entero indicando qué opciones queremos que tenga la ventana. Los posibles valores son las constantes definidas enJOptionPane: DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, o OK_CANCEL_OPTION.

  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, o PLAIN_MESSAGE

  icon: Un icono para mostrar. Si ponemos null, saldrá el icono adecuado según el parámetro messageType.

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

  initialValue: Selección por defecto. Debe ser uno de los Object que hayamos pasado en el parámetro 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.

Un ejemplo de cómo llamar a este método

int seleccion = JOptionPane.showOptionDialog(
   unComponentePadre,
   "Seleccione opcion",
   "Selector de opciones",
   JOptionPane.YES_NO_CANCEL_OPTION,
   JOptionPane.QUESTION_MESSAGE,
   unIcono,    // null para icono por defecto.
   new Object[] { "opcion 1", "opcion 2", "opcion 3" },   // null para YES, NO y CANCEL
   "opcion 1");
if (seleccion != -1)
   System.out.println("seleccionada opcion " + (seleccion + 1));

Y la ventana que se obtiene con el código anterior



JOptionPane.showInputDialog()

Tenemos varios métodos JOptionPane.showInputDialog() y la diferencia entre ellos es que tienen más o menos parámetros, según queramos aceptar o no las opciones por defecto. Los parámetros y sus significados son muy similares a los del método showOptionDialog(), pero hay una diferencia.
Si usamos los métodos que no tienen array de opciones, la ventana mostrará una caja de texto para que el usuario escriba la opción que desee (un texto libre). Si usamos un método que tenga un array de opciones, entonces aparecerá en la ventana un JComboBox en vez de una caja de texto, donde estarán las opciones que hemos pasado.

Código, el primero para conseguir una caja de texto,

// Con caja de texto
String seleccion = JOptionPane.showInputDialog(
   unComponentePadre,
   "Input dialog",
   JOptionPane.QUESTION_MESSAGE);  // el icono sera un iterrogante       
System.out.println("El usuario ha escrito "+seleccion);

Y la imagen que obtenemos con este código



En este segundo ejemplo, damos todas las opciones que queremos, obteniendo un JComboBox

// Con JCombobox
Object seleccion = JOptionPane.showInputDialog(
   unComponentePadre,
   "Seleccione opcion",
   "Selector de opciones",
   JOptionPane.QUESTION_MESSAGE,
   unIcono,  // null para icono defecto
   new Object[] { "opcion 1", "opcion 2", "opcion 3" },
   "opcion 1");
System.out.println("El usuario ha elegido "+seleccion);

Y esta es la imagen que se obtiene.


JOptionPane.showMessageDialog()

Esta es la más sencilla de todas, sólo muestra una ventana de aviso al usuario. La ejecución se detiene hasta que el usuario cierra la ventana. Hay varios métodos con el mismo nombre y más o menos parámetros, en función de si aceptamos las opciones por defecto (icono, por ejemplo) o queremos cambiar alguna cosa. Un trozo de código para llamarlo

JOptionPane.showMessageDialog(
   componentePadre,
   "Un aviso",
    “Mensaje”,
      JOptionPane. INFORMATION_MESSAGE);
System.out.println("ya estas avisado");

Y la imagen que muestra este código


JOptionPane.showConfirmDialog()

Este método muestra una ventana pidiendo una confirmación al usuario, estilo "¿Seguro que lo quieres borrar todo?" y da al usuario opción de aceptar o cancelar ese borrado masivo que está a punto de hacer. El método devuelve un entero indicando la respuesta del usuario. Los valores de ese entero puede ser alguna de las constantes definidas en JOptionPane: YES_OPTION, NO_OPTION, CANCEL_OPTION, OK_OPTION, CLOSED_OPTION. Por supuesto, hay metodos iguales con más o menos parámetros para configurar las cosas más o menos.
El siguiente ejemplo de codigo

int confirmado = JOptionPane.showConfirmDialog(
   componentePadre,
   "¿Lo confirmas?");
if (JOptionPane.OK_OPTION == confirmado)
   System.out.println("confirmado");
else
   System.out.println("ok... no borro nada...");

Muestra la siguiente imagen


1 comentario:

  1. Hola. ¿Es posible, que en el caso del cuadro de dialogo con JComboBox llenar este a partir de un base de datos?. Y de ser posible ¿Como se haria?. Saludos.

    ResponderEliminar