Ayudanos contestando la siguiente encuesta acerca de Videojuegos!
Ir a la encuesta
>

Ventanas

 

Archivos necesarios:

En este trial veremos como hacer que nuestras aplicaciones puedan mostrar varias ventanas o puedan manejar diálogos que nos permitan obtener información del usuario. Como podremos ver mostrar ventanas es muy sencillo y ya sabemos como utilizar la mayoría del código que vamos a utilizar. Esto puede sernos útil si estamos haciendo un proyecto en donde tengamos que pedir mucha información y sea necesario separarla para que el usuario no se sature, por ejemplo en un programa de resolución de problemas multiusuario donde ciertos usuarios van a agregar información sobre errores y otros usuarios van a agregar información sobre las soluciones.

El archivo contiene tres clases. La primera clase llamada Main es la forma principal del programa y es la que contiene la mayor parte del códgio útlil de la aplicación, la clase Ventana nos muestra cómo crear una ventana, mostrarla e interactuar con la ventana que la invocó, la clase Dialogo nos muestra cómo crear un diálogo que interactue con la ventana padre.

Main.java
Ventanas.zip

 

¿Qué son ventanas, qué son diálogos?

Cuando queremos mostrar más de una ventana en nuestra aplicación podemos utilizar dos estrategias, en la primera estrategia la ventana que invoca (padre) es la que tiene el control, la ventana que invocamos (hijo) debe responderle a la primera ventana. Esta estrategia tiene como ventaja que puedes tener todo el control de las ventanas en una misma clase, pero tiene la desventaja de que la ventana padre debe esperar a que termine su hijo.

La otra estrategia es crear otra ventana padre que sea independiente de la primera ventana, esto hace que la interacción entre ventanas sea un poco menos natural pero nos permite utilizar las dos ventanas al mismo tiempo.

En Java para identificar las ventanas padres utilizamos el JFrame y las ventanas hijo las representamos mediante un JDialog.

 

¿Cómo crear ventanas?

Una ventana no es más que un JFrame. Para crear una ventana tenemos que crear una clase que extienda JFrame, después tenemos que crear controles mediante las clases de Swing y por último debemos ponerle tamaño, título y mostrarla. Aunque con esto podemos mostrar una ventana regularmente no es suficiente para nuestra aplicación ya que no nos permite tener interacción entre ventanas. Para poder tener interacción entre ventanas debemos crear una referencia a la ventana.
En la imagen de la izquierda podemos ver que estamos creando un constructor para Ventana en el que recibimos un objeto de la clase Main (nuestra ventana principal). Esto no es necesario, únicamente lo hacemos para que esta ventana pueda interactuar con la ventana principal. La variable parent debe ser de la clase Main y debe tener alcance global en la clase para que podamos utilizarla en los métodos que necesiten interactuar con esta.
En el programa de ejemplo utilizamos la referencia que tenemos a Main para mandar llamar el metodo setButtonBackground() de la ventana principal, este método cambia el color de fondo de los botones de la ventana principal al color pasado como parámetro. Si no tuvieramos la referencia a la ventana principal no podríamos hacer esto.

 

Luke, Yo Soy Tu Padre

Un diálogo se crea basicamente de la misma manera que se crea una ventana. La principal diferencia es que un diálogo tiene un padre, que es la ventana que lo mandó a invocar y el padre espera a que el diálogo termine las operaciones que tenga que hacer antes de continuar.

Para poder indicarle a nuestro dialogo quién es su padre debemos invocar el constructor de la super clase (JDialog) que recibe como parámetro la clase padre (debe heredar la clase Window, es decir JFrame, JDialog, Frame, Dialog o cualquier clase que extienda a estas) y un valor boolean que nos indica si la ventana es modal, es decir, si va a bloquear la ejecución del padre hasta que este diálogo sea cerrado.

Para poder invocar métodos de la super clase debemos utilizar la palabra clave super. Para poder llamar el constructor de la super clase utilizamos el método super() que recibe los parámetros que reciba el constructor. En la imagen de la izquierda podemos ver que estamos llamando el método con la ventana padre (Main que extiende JFrame) y con el valor true porque queremos esperar a que termine el usuario antes de realizar alguna acción.

En la ventana que invoca el diálogo debemos crear la ventana utilizando el constructor que recibe un objeto de la clase Main, después de que sea invocado el código va a esperar hasta que el diálogo haya terminado y entonces va a continuar, por lo que podemos llamar alguno de los métodos del diálogo para recibir su información (en el ejemplo es el color que seleccionó el usuario pero podría ser si el usuario decidió cancelar o todo objeto que haya creado mediante los controles del diálogo).

 

Otros Diálogos

Además de crear nuestros propios diálogos podemos invocar una clase llamada JOptionPane que incluye una gran cantidad de métodos útiles para mostrar diálogos. El primero método que vamos a ver es el método showMessageDialog() (recuerda que JOptionPane es una clase de swing entonces tienes que importar javax.swing.*) MessageDialog
El método recibe como primer parámetro el componente que lo manda llamar. Para este parámetro siempre vamos a mandar this (que hace referencia a la ventana actual), esto lo hacemos con el fin de que la ventana que lo manda llamar no pueda ser accesada mientras estamos utilizando el diálogo; el segundo parámetro que mandamos es el mensaje que queremos desplegar, podemos mandar un String ya sea como variable o escribiendolo. Estos dos parámetros son los únicos que son indipensables para mandar llamar el MessageDialog pero también podemos incluir más parámetros que nos permiten configurarlo, el tercer parámetro es el título que va a mostrar la ventana, el cuarto es el tipo de MessageDialog que queremos mostrar (si es ventana de error, de información, etc. dependiendo del tipo que eligamos es el ícono que muestra la ventana)
InputDialog También podemos agregar diálogos que nos muestren una barra para poder escribir, estos diálogos se muestran con el método showInputDialog() de la clase JOptionPane. El método recibe los mismos parámetros que el método showMessageDialog() pero además de esto nos devuelve un Object con la respuesta del usuario por lo que tenemos que hacer un cast a String (como se ve en la foto a la izquierda).
Si queremos darle la oportunidad al usuario de elegir, pero no queremos que pueda elegir entre cualquier valor sino queremos darle valores para elegir podemos utilizar el JOptionPane que además de los parámetros que ya vimos tiene otros tres. InputDialog List

El primero es un ImageIcon que nos permite poner el ícono que se muestra (ver trial Imagenes), el segundo nos permite especificar un arreglo con las opciones que se puedan elegir (fíjate que en este caso es un arreglo de String) y el tercero es el índice de la opción seleccionada cuando aparece el diálogo.

Además de todos los métodos que ya vimos de JOptionPane todavía quedan muchos otros métodos de esta clase y muchos otros usos que le podemos dar. Para las aplicaciones que vamos a hacer esto es más que suficiente pero también podemos mostrar dialogos de confirmación (muy similares a los dialogos de mensajes) y podemos mostrar cualquier JPanel que tengamos en la ventana de diálogo. Si quieres saber más acerca de los diálogo te recomiendo visitar

RegresarRegresar

               
Ayudanos contestando la siguiente encuesta acerca de Videojuegos!
Ir a la encuesta